개발/Python

[파이썬] Pylint 경고를 비활성화는 방법은?

MinorMan 2023. 1. 20. 12:58
반응형

<질문>

경고 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=C0321Pylint 구성 파일에 있지만 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

Pylint 메시지 코드.

추가 예--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에서 경고 및 오류를 비활성화하는 방법에는 여러 가지가 있습니다. 어느 것을 사용해야 하는지는 비활성화를 적용하려는 전역적 또는 로컬 방식과 관련이 있습니다. 이는 중요한 설계 결정입니다.

다중 접근법

  1. 하나 이상에서pylintrc파일.

여기에는~/.pylintrcChris Morgan이 설명한 대로 파일($HOME 디렉토리에 있음). Pylint는 "가까운" 파일을 더 높게 평가하는 우선 순위로 rc 파일을 검색합니다.

  • 현재 작업 디렉토리에 있는 pylintrc 파일. 또는

  • 현재 작업 디렉토리가 파이썬 모듈에 있는 경우(즉, __init__.py 파일을 포함하는 경우), pylintrc 파일을 찾을 때까지 파이썬 모듈의 계층 구조를 검색합니다. 또는

  • 환경 변수 PYLINTRC로 명명된 파일. 또는

  • /root 가 아닌 홈 디렉토리가 있는 경우:

    • ~/.pylintrc ; 또는

    • ~/.config/pylintrc ; 또는

    • /etc/pylintrc

이러한 파일의 대부분은pylintrc-- 있는 파일만~선행 점이 있습니다.

너의 ~에게pylintrc파일에 특정 pylint 메시지를 비활성화하는 행을 추가합니다. 예를 들어:

[MESSAGES CONTROL]
disable=locally-disabled
  1. Aboo 및 Cairnarvon이 설명한 대로 pylint 명령줄에서 추가로 비활성화합니다. 이것은 pylint --disable=bad-builtin 처럼 보입니다. --disable 을 반복하여 추가 항목을 억제합니다.

  2. Imolit에서 설명한 대로 개별 Python 코드 줄에서 추가로 비활성화합니다. some statement # pylint: disable=broad-except (원본 소스 줄 끝에 추가 주석)와 같이 보이며 현재 줄에만 적용됩니다 . 내 접근 방식은 블록 스타일과 혼동되지 않도록 항상 다른 코드 줄의 끝에 배치하는 것입니다(아래 참조).

  3. 완전한 소스 파일까지 Python 코드의 더 큰 블록에 대해 정의된 비활성화를 추가로 비활성화합니다.

    • # pragma pylint: disable=bad-whitespace 처럼 보입니다( pragma 키워드에 주의).

    • 이들은 pragma 이후의 모든 행에 적용됩니다 . 이러한 블록을 파일 맨 위에 놓으면 억제가 전체 파일에 적용됩니다. 동일한 블록을 파일의 아래쪽에 배치하면 블록 다음 줄에만 적용됩니다. 내 접근 방식은 위의 한 줄 스타일과 혼동되지 않도록 항상 자신의 줄에 넣는 것입니다.

    • 억제가 코드 범위 내에서만 적용되어야 하는 경우 # pragma pylint: enable=bad-whitespace (현재 enable not disable )를 사용하여 억제를 중지합니다.

한 줄에 대해 비활성화하면# 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-initunittest 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"
    ],
}
반응형