<질문>
경고 C0321("한 줄에 둘 이상의 명령문")을 비활성화하려고 합니다.if
같은 줄에 짧은 한 줄 결과가 있는 명령문), Pylint 0.21.1(중요한 경우: astng 0.20.1, common 0.50.3 및 Python 2.6.6(r266:84292, 2010년 9월 15일, 16:22) :56)).
추가해보았습니다disable=C0321
Pylint 구성 파일에 있지만 Pylint는 어쨌든 보고해야 한다고 주장합니다. 해당 라인의 변형(예:disable=0321
또는disable=C321
)는 오류로 표시되므로 Pylint하다옵션을 올바르게 인식하십시오. 그냥 무시하고 있을 뿐입니다.
이것은 Pylint 버그입니까, 아니면 내가 뭔가 잘못하고 있습니까? 이 문제를 해결할 방법이 있습니까?
이 소음을 정말 없애고 싶습니다.
<답변1>
pylint --generate-rcfile
다음과 같이 보여줍니다.
[MESSAGES CONTROL]
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time.
#enable=
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once).
#disable=
그래서 그것은 당신처럼 보입니다~/.pylintrc
가지고 있어야disable=
섹션 내부의 줄[MESSAGES CONTROL]
.
<답변2>
Pylint v. 0.25.3부터 경고를 비활성화하기 위해 기호 이름을 사용할 수 있습니다.instead of having to remember all those code numbers. 예:
# pylint: disable=locally-disabled, multiple-statements, fixme, line-too-long
이 스타일은 암호 오류 코드보다 더 유익하며 최신 버전의 Pylint는 오류 코드가 아닌 기호 이름만 출력하므로 더 실용적입니다.
기호 이름과 코드 간의 대응 관계를 찾을 수 있습니다.here.
비활성화 주석은 자체 줄에 삽입할 수 있으며 동일한 블록에서 뒤에 오는 모든 항목에 비활성화를 적용합니다. 또는 적용하려는 행의 끝에 삽입할 수 있습니다.
Pylint가 "Locally disabling
" 메시지는 비활성화를 포함하여 제거할 수 있습니다.locally-disabled
첫 번째위의 예에서와 같이.
<답변3>
나는이 문제를 사용하여식그리고 다음과 같이 해결했습니다.
에서pylint 폴더(예:C:\Python26\Lib\site-packages\pylint
), 잡고 있다옮기다, 마우스 오른쪽 버튼을 클릭하고 해당 폴더에서 Windows 명령을 열도록 선택합니다. 유형:
lint.py --generate-rcfile > standard.rc
이것은standard.rc
구성 파일. 메모장 및 아래에서 엽니다.[MESSAGES CONTROL]
, 주석 해제disable=
비활성화하려는 메시지 ID를 추가합니다. 예:
disable=W0511, C0321
파일을 저장하고 Eclipse에서 →창문→기본 설정→PyDev→ *pylint, 인수 상자에 다음을 입력합니다.
--rcfile=C:\Python26\Lib\site-packages\pylint\standard.rc
이제 작동해야합니다 ...
당신은 또한 수코멘트를 추가하다Pylint에 의해 해석될 코드의 맨 위에:
# pylint: disable=C0321
추가 예--disable-ids=C0321
인수 상자에서 작동하지 않습니다.
사용 가능한 모든 Pylint 메시지는 사전에 저장됩니다._messages
, 인스턴스의 속성pylint.utils.MessagesHandlerMixIn
수업. 인수로 Pylint를 실행할 때--disable-ids=...
(적어도 구성 파일이 없으면) 이 사전은 처음에 비어 있으며 Pylint 내에서 KeyError 예외를 발생시킵니다(pylint.utils.MessagesHandlerMixIn.check_message_id()
.
Eclipse에서는 Pylint 콘솔(windows* →보기 표시→콘솔, 콘솔 아이콘 옆의 콘솔 옵션에서 Pylint 콘솔을 선택합니다.)
<답변4>
블록에서 로컬로 경고를 비활성화하려면 다음을 추가하십시오.
# pylint: disable=C0321
그 블록에.
<답변5>
Pylint에서 경고 및 오류를 비활성화하는 방법에는 여러 가지가 있습니다. 어느 것을 사용해야 하는지는 비활성화를 적용하려는 전역적 또는 로컬 방식과 관련이 있습니다. 이는 중요한 설계 결정입니다.
다중 접근법
- 하나 이상에서
pylintrc
파일.
여기에는~/.pylintrc
Chris Morgan이 설명한 대로 파일($HOME 디렉토리에 있음). Pylint는 "가까운" 파일을 더 높게 평가하는 우선 순위로 rc 파일을 검색합니다.
현재 작업 디렉토리에 있는
pylintrc
파일. 또는현재 작업 디렉토리가 파이썬 모듈에 있는 경우(즉,
__init__.py
파일을 포함하는 경우),pylintrc
파일을 찾을 때까지 파이썬 모듈의 계층 구조를 검색합니다. 또는환경 변수 PYLINTRC로 명명된 파일. 또는
/root
가 아닌 홈 디렉토리가 있는 경우:~/.pylintrc
; 또는~/.config/pylintrc
; 또는/etc/pylintrc
이러한 파일의 대부분은pylintrc
-- 있는 파일만~
선행 점이 있습니다.
너의 ~에게pylintrc
파일에 특정 pylint 메시지를 비활성화하는 행을 추가합니다. 예를 들어:
[MESSAGES CONTROL]
disable=locally-disabled
Aboo 및 Cairnarvon이 설명한 대로
pylint
명령줄에서 추가로 비활성화합니다. 이것은pylint --disable=bad-builtin
처럼 보입니다.--disable
을 반복하여 추가 항목을 억제합니다.Imolit에서 설명한 대로 개별 Python 코드 줄에서 추가로 비활성화합니다.
some statement # pylint: disable=broad-except
(원본 소스 줄 끝에 추가 주석)와 같이 보이며 현재 줄에만 적용됩니다 . 내 접근 방식은 블록 스타일과 혼동되지 않도록 항상 다른 코드 줄의 끝에 배치하는 것입니다(아래 참조).완전한 소스 파일까지 Python 코드의 더 큰 블록에 대해 정의된 비활성화를 추가로 비활성화합니다.
# pragma pylint: disable=bad-whitespace
처럼 보입니다(pragma
키워드에 주의).이들은 pragma 이후의 모든 행에 적용됩니다 . 이러한 블록을 파일 맨 위에 놓으면 억제가 전체 파일에 적용됩니다. 동일한 블록을 파일의 아래쪽에 배치하면 블록 다음 줄에만 적용됩니다. 내 접근 방식은 위의 한 줄 스타일과 혼동되지 않도록 항상 자신의 줄에 넣는 것입니다.
억제가 코드 범위 내에서만 적용되어야 하는 경우
# pragma pylint: enable=bad-whitespace
(현재enable
notdisable
)를 사용하여 억제를 중지합니다.
한 줄에 대해 비활성화하면# pylint
이 줄을 비활성화하는 동안 구문은 다음을 사용합니다.# pragma pylint
통사론. 특히 복사하여 붙여넣을 때 혼동하기 쉽습니다.
함께 모아서
저는 보통 이러한 접근 방식을 혼합하여 사용합니다.
저는 절대적으로 글로벌 표준을 위해
~/.pylintrc
를 사용합니다. 이 중 극소수입니다.프로젝트별 표준이 있을 때 Python 모듈 내의 여러 수준에서 프로젝트 수준
pylintrc
를 사용합니다. 특히 다른 사람이나 팀의 코드를 가져올 때 선호하지 않는 규칙을 사용하지만 코드를 다시 작업하고 싶지는 않을 수 있습니다. 설정을 이 수준으로 유지하면 이러한 사례가 다른 프로젝트로 확산되지 않습니다.단일 소스 파일의 맨 위에 있는 블록 스타일 pragma를 사용합니다. 나는 동의하지 않는 Pylint 표준에 대해서도 개발의 열기 속에서 pragma를 끄는 것을 좋아합니다(메시지 억제 중지). 개발하는 동안 더 많은/어쩌면 모든 Pylint 메시지를 보는 것이 도움이 됩니다. 그렇게 하면 한 줄 pragma(아래 참조)로 해결하려는 경우를 찾거나 다음 개발자가 이 경우 경고가 괜찮은 이유를 설명하는 주석을 추가할 수 있습니다.
코드를 체크인할 준비가 된 경우에도 일부 블록 스타일 pragma를 활성화된 상태로 둡니다. 그 중 일부를 사용하려고 하지만 모듈에 적합할 때 문서화하는 것이 좋습니다. 그러나 나는 가능한 한 적게, 가급적이면 아무것도 남기지 않으려고 노력합니다.
특히 강력한 오류를 해결하기 위해 한 줄 주석 스타일을 사용합니다. 예를 들어,
except Exception as exc
를 수행하는 것이 실제로 의미가 있는 곳이 있는 경우, 이상한 예외이고 호출해야 하기 때문에 더 전역적인 접근 방식 대신# pylint: disable=broad-except
를 해당 줄에 넣습니다. 기본적으로 문서 형식입니다.
파이썬의 다른 모든 것과 마찬가지로 다양한 간접 참조 수준에서 작동할 수 있습니다. 내 조언은 Pylint에 대해 너무 관대 한 접근 방식으로 끝나지 않도록 어떤 수준에 속하는지 생각하는 것입니다.
<답변6>
이것은FAQ:
4.1 특정 메시지를 로컬에서 비활성화할 수 있습니까? 예, 이 기능은 Pylint 0.11에 추가되었습니다. 원하는 블록 수준이나 원하는 코드 줄 끝에 # pylint: disable=some-message,another-one을 추가하면 됩니다. 4.2 특정 모듈에 대해서만 메시지를 비활성화하는 방법이 있습니까? 예, 파일 상단의 주석에 해당 옵션을 추가하여 모듈 수준에서 메시지를 비활성화하거나 활성화(전역적으로 비활성화)할 수 있습니다. # pylint: disable=wildcard-import, method-hidden # pylint: enable=too- 여러 줄
다음과 같은 방법으로 메시지를 비활성화할 수 있습니다.
- 숫자 ID:
E1101
,E1102
, 등. - 상징적 메시지:
no-member
,undefined-variable
, 등. - 검사 그룹의 이름입니다. 당신은 그들을 잡을 수 있습니다
pylint --list-groups
. - 수표 카테고리:
C
,R
,W
, 등. - 모든 수표
all
.
보다the documentation(또는 실행pylint --list-msgs
터미널에서) Pylint 메시지의 전체 목록을 보려면. 문서는 또한 좋은example이 기능을 사용하는 방법.
<답변7>
다음 명령을 사용할 수도 있습니다.
pylint --disable=C0321 test.py
내 Pylint 버전은 0.25.1입니다.
<답변8>
비활성화하려는 항목을 비활성화하려면 한 줄만 추가하면 됩니다.
예를 들어,
#pylint: disable = line-too-long, too-many-lines, no-name-in-module, import-error, multiple-imports, pointless-string-statement, wrong-import-order
모듈 맨 처음에 이것을 추가하십시오.
<답변9>
이것이 누군가를 돕는 경우, 당신이 사용하는 경우Visual Studio Code, 파일이 UTF-8 인코딩일 것으로 예상합니다. 파일을 생성하기 위해 실행했습니다.pylint --generate-rcfile | out-file -encoding utf8 .pylintrc
안에PowerShell.
<답변10>
전역 구성 파일에서 더 잘 해결되는 포스터의 일반적인 선호도에 대한 초기 질문에서 약간 벗어나서 죄송합니다. 그러나 많은 대중적인 답변에서와 같이 저는 제 코드에서 경고를 유발할 수 있는 것을 보는 것을 선호하는 경향이 있으며 결국 기여자에게도 알립니다 .
@imolit의 답변 에 대한 내 의견은 짧게 유지해야 합니다. 여기에 몇 가지 세부 정보가 있습니다.
을 위한multiple-statements
메시지, 비활성화하는 것이 좋습니다블록 또는 모듈 수준에서이와 같이
# pylint: disable=multiple-statements
내 유스 케이스는 지금attribute-defined-outside-init
unittest setup()에서 나는라인 범위메시지 비활성화, 메시지 코드를 사용하여line-too-long
문제.
class ParserTest(unittest.TestCase):
def setUp(self):
self.parser = create_parser() # pylint: disable=W0201
대응은 다음과 같은 명령으로 로컬에서 찾을 수 있습니다.
$ pylint --list-msgs | grep 'outside-init'
:attribute-defined-outside-init (W0201): *Attribute %r defined outside __init__*
물론 유사하게 코드에서 기호 이름을 검색할 수 있습니다.
<답변11>
에 따라파이린트문서, 가장 쉬운 방법은 사용하는 것입니다.this chart:
- C 규칙 관련 검사
- R 리팩토링 관련 검사
- W 각종 경고
- 코드의 가능한 버그에 대한 E 오류
- F Pylint가 추가 처리를 수행하지 못하게 하는 오류가 발생한 경우 치명적입니다.
따라서 다음을 사용할 수 있습니다.
pylint -j 0 --disable=I,E,R,W,C,F YOUR_FILES_LOC
<답변12>
Python 구문은 한 줄에 세미콜론(;)으로 구분된 둘 이상의 명령문을 허용합니다. 그러나 각 행을 하나의 명령문으로 제한하면 사람이 프로그램을 읽을 때 프로그램의 논리를 더 쉽게 따라갈 수 있습니다.
따라서 이 문제를 해결하는 또 다른 방법은 lint 메시지가 있는 이유를 이해하고 한 줄에 둘 이상의 명령문을 넣지 않는 것입니다.
예, 한 줄에 여러 문을 작성하는 것이 더 쉬울 수 있지만 Pylint는 귀하뿐만 아니라 코드의 다른 모든 독자를 위한 것입니다.
<답변13>
나의pylint
계속 무시했다disable
내 목록.pylintrc
. 마지막으로 다음을 실행하고 있음을 깨달았습니다.
pylint --disable=all --enable=F,E,W
이는disable
내 목록.pylintrc
.
치명적, 오류, 경고만 표시하는 올바른 명령은 다음과 같습니다.
pylint --disable=C,R
<답변14>
"C:\Users\Your User\AppData\Roaming\Code\User\settings.json"을 편집하고 아래와 같이 끝에 줄과 함께 'python.linting.pylintArgs'를 추가합니다.
{
"team.showWelcomeMessage": false,
"python.dataScience.sendSelectionToInteractiveWindow": true,
"git.enableSmartCommit": true,
"powershell.codeFormatting.useCorrectCasing": true,
"files.autoSave": "onWindowChange",
"python.linting.pylintArgs": [
"--load-plugins=pylint_django",
"--errors-only"
],
}
'개발 > Python' 카테고리의 다른 글
[파이썬] requests 라이브러리에서 JSON 응답을 구문 분석하는 가장 좋은 방법은? (0) | 2023.01.20 |
---|---|
[파이썬] pandas 다른 데이터 프레임에 없는 행을 가져오는 방법은? (0) | 2023.01.20 |
[파이썬] 백그라운드 프로세스를 시작하는 방법은? (0) | 2023.01.20 |
[파이썬] UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c (0) | 2023.01.20 |