Pylint 경고를 비활성화하려면 어떻게합니까?


267

ifPylint 0.21.1 (중요한 경우 : astng 0.20)에서 경고 C0321 ( "한 줄에 두 개 이상의 문")을 사용하지 않으려 고합니다 . 1, 공통 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
모든 종류의 오류가 아닌 한 줄의 코드를 비활성화하려는 경우 여기에 좋은 해결책이 있습니다 .
르 드로이드

답변:


168

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]


1
감사합니다. 그러나 위와 같이 [MESSAGES CONTROL] 섹션에 이미 있습니다. 여전히 무시되었습니다.
Head Geek

6
@Head Geek : 글쎄, 그것은 나를 위해 작동합니다. ~/.pylintrc이 개 라인, [MESSAGES CONTROL]그리고 disable=C0321. 그 메시지를 방지합니다.
Chris Morgan

홀수 ... 정확히 같은 버전의 PyLint?
헤드 eek

@Head Geek : 0.21.3, astng 0.20.3 및 common 0.52.1 실제로 (내가 설치 한 최신 버전, 최신 것보다 최신 버전)
Chris Morgan

1
@ 크리스 모건 : 아. 아마도 이미 수정 된 버그 일 것입니다. 우분투 저장소의 버전을 사용하고 있습니다. 감사!
헤드 eek

165

이클립스를 사용 하여이 문제가 있었고 다음과 같이 해결했습니다.

pylint 폴더 (예 :)에서 C:\Python26\Lib\site-packages\pylintShift 키를 누른 상태에서 마우스 오른쪽 버튼을 클릭하고 해당 폴더에서 windows 명령을 열도록 선택합니다. 유형:

lint.py --generate-rcfile > standard.rc

standard.rc구성 파일 이 생성 됩니다. 메모장에서을 열고 [MESSAGES CONTROL]주석을 해제 disable=하고 비활성화하려는 메시지 ID를 추가하십시오. 예 :

disable=W0511, C0321

파일을 저장하고 Eclipse-> window-> preferences-> PyDev-> pylint의 인수 상자에 다음을 입력하십시오.

--rcfile=C:\Python26\Lib\site-packages\pylint\standard.rc

이제 작동해야합니다 ...


pylint가 해석 할 주석 을 코드 상단에 추가 할 수도 있습니다 .

# pylint: disable=C0321

모든 pylint 메시지 코드에 연결


--disable-ids=C0321인수 상자에 예 를 추가하면 작동하지 않습니다. 사용 가능한 모든 pylint 메시지는 클래스 _messages인스턴스의 속성 인 dictionary에 저장됩니다 pylint.utils.MessagesHandlerMixIn. 인수와 함께 pylint를 실행하면 --disable-ids=...(적어도 구성 파일없이)이 사전은 비어 있으며 pylint 내에서 KeyError 예외가 발생합니다 pylint.utils.MessagesHandlerMixIn.check_message_id(). 콘솔 아이콘 옆의 콘솔 옵션에서 Pylint 콘솔을 선택하십시오.)


2
아뇨, 정말로해서는 안됩니다. 1) 그것은 질문과 관련이없는 Eclipse를 참조합니다. 2) 레거시 메시지 코드를 통해 비활성화하는 것이 좋습니다. 내가 추천 할 것입니다 내 대답은 간단한 문제에 대한 해결책, 또는에 대한 크리스 존슨의 대답 자세한 내용은.
imolit

153

Pylint v. 0.25.3부터는 모든 코드 번호를 기억할 필요없이 경고를 비활성화하기 위해 기호 이름을 사용할 있습니다. 예 :

# pylint: disable=locally-disabled, multiple-statements, fixme, line-too-long

이 스타일은 암호 오류 코드보다 유익하며, 최신 버전의 Pylint는 오류 코드가 아닌 기호 이름 만 출력하기 때문에 더욱 실용적입니다.

기호 이름과 코드 사이의 일치는 여기 에서 찾을 수 있습니다 .

비활성화 주석은 자체 블록에 삽입하여 같은 블록에서 나오는 모든 것에 비활성화를 적용 할 수 있습니다. 또는 적용하려는 라인의 끝에 삽입 할 수 있습니다.

pylint가 " Locally disabling"메시지를 출력하는 경우 위의 예와 같이 locally-disabled 먼저 disable을 포함시켜 메시지를 제거 할 수 있습니다 .


20
그러나 # pylint: disable=fooinlyne을 넣으면 너무 길어지기 때문에 이제 추가해야합니다 , line-too-long! 혀-인-뺨; 이것이 내가 필요한 것이며 내 문제를 해결합니다. 감사!
dwanderson

사용할 실제 문자열 목록 : gist.github.com/m451/965bb613177dd4fa896b815aa0e0e365
masi

81

블록에서 로컬로 경고를 비활성화하려면 추가

# pylint: disable=C0321

그 블록에.


5
이것은 레거시 기술이며 더 이상 권장되지 않습니다. 다른 답변을 참조하십시오.
Acumenus

1
코드 번호 대신 기호 이름을 사용해야한다는 것을 의미합니다.
thakis

5
예. imolit답변은이 점을 정확히 다룹니다.
Acumenus

2
상징적 인 이름을 어떻게 찾습니까? 내 편집기는 뱉어 낼 [pylint] C0111: Missing method docstring것이므로 코드 번호를 찾는 것은 쉽지만 기호 이름을 찾으면 찾아야합니다.
Adam Parkin

@AdamParkin 여기에서 내 메시지를 찾았습니다 : pylint-messages.wikidot.com/all-messages
Jean-Francois T.

80

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. pylintAboo 및 Cairnarvon에서 설명한대로 명령 줄 에서 추가로 비활성화합니다 . 이것은 다음과 같습니다 pylint --disable=bad-builtin. --disable추가 항목을 억제 하려면 반복하십시오 .

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

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

    • 이것들은 다음과 같습니다 # pragma pylint: disable=bad-whitespace( pragma핵심 단어를 주목하십시오 ).

    • 이것은 pragma 다음모든 줄에 적용됩니다 . 이러한 블록을 파일 맨 위에두면 억제가 전체 파일에 적용됩니다. 파일에서 같은 블록을 낮추면 블록 뒤에 오는 행에만 적용됩니다. 나의 접근 방식은 항상 이것들을 그들 자신의 라인에 두어 단일 라인 스타일과 혼동하지 않도록하는 것입니다 (위 참조).

    • 억제가 코드 범위 내에서만 적용되어야하는 경우 억제 를 중지 하려면 # pragma pylint: enable=bad-whitespace(지금 사용 enable하지 않음 disable)을 사용하십시오 .

한 줄 # pylint을 비활성화 하면 구문이 사용 되지만이 줄을 비활성화 하면 구문이 사용 # pragma pylint됩니다. 복사 및 붙여 넣기시 혼동하기 쉽습니다.

함께 모아서

나는 보통 이러한 접근법을 혼합하여 사용합니다.

  • 나는 ~/.pylintrc절대적으로 세계 표준에 사용 합니다.

  • pylintrc프로젝트 별 표준이있을 때 Python 모듈 내의 다른 수준에서 프로젝트 수준 을 사용 합니다. 특히 다른 사람이나 팀에서 코드를 가져 오는 경우 선호하지 않는 규칙을 사용하지만 코드를 다시 작성하고 싶지는 않을 수 있습니다. 설정을이 수준으로 유지하면 이러한 관행을 다른 프로젝트에 전파하지 않아도됩니다.

  • 단일 소스 파일 맨 위에 블록 스타일 pragma를 사용합니다. 필자는 Pylint 표준에 대해서도 개발의 열기에서 pragma를 끄고 (메시지를 표시하지 않음) 동의하지 않습니다 (예 : "너무 적은 공용 메소드"-항상 사용자 정의 예외 클래스에 대해 경고가 나타납니다). 개발하는 동안 더 많은 / 아마도 모든 Pylint 메시지를 보는 것이 도움이됩니다. 이렇게하면 한 줄짜리 pragma (아래 참조)로 해결하려는 사례를 찾거나 다음 개발자에게 설명을 추가하여이 경우 경고가 괜찮은 이유를 설명 할 수 있습니다.

  • 코드를 체크인 할 준비가되어 있어도 일부 블록 스타일의 pragma를 활성화 된 상태로 둡니다. 그 중 몇 가지를 사용하려고 시도하지만 모듈에 적합하면 문서로 수행해도됩니다. 그러나 가능한 한 적은 수를 남겨 두려고 노력합니다.

  • 특히 강력한 오류를 해결하기 위해 한 줄 주석 스타일을 사용합니다. 실제로 할 의미가있는 장소가 있다면 예를 들어 except Exception as exc, 내가 넣어 # pylint: disable=broad-except이 기본적으로 문서의 형태로, 밖으로 호출 할 이상한 예외 요구하기 때문에 대신 좀 더 글로벌 접근 방식의 라인에.


파이썬의 다른 모든 것들과 마찬가지로, 당신은 다른 수준의 간접적으로 행동 할 수 있습니다. 내 조언은 Pylint에 너무 관대 한 접근으로 끝나지 않도록 어떤 수준에 속하는지 생각하는 것입니다.



1
대부분의 경우 나는 비어 있지 않은 전역을 사용하여 옹호 할 수 없다 ~/.pylintrc. IMHO의 경우 구성은 일반적으로 프로젝트와 연결되어 있으므로 프로젝트 내 어딘가에 있어야합니다. 그래야만 버전을 제어하고 프로젝트와 공유 할 수 있습니다. 이를 실패하면 클론은 메시지를 인쇄하지 않고 pylint를 종료하는 데 필요한 사용자 정의가 부족할 수 있습니다.
Acumenus

@ABB 나는 그것이 현명하다고 생각합니다
Chris Johnson

3
@ChrisJohnson 접두사 pragma 는 완전히 불필요한 것 같습니다. 예를 들어, 나는 # pylint: disable=missing-docstring파일의 맨 위에 있고 파일의 나머지 부분에 모두 적용됩니다. pragma답변 에서 접두사를 확인하고 제거하십시오 .
Acumenus

Pylint FAQ는 pragma에 대해 쓰지 않습니다. ( pylint.pycqa.org/en/latest/… ) : 파일 상단의 주석에 해당 옵션을 추가하여 모듈 수준에서 메시지를 비활성화하거나 활성화 (전역 비활성화) 할 수 있습니다. # pylint : disable = wildcard- import, method-hidden # pylint : enable = too-many-lines
Yaroslav Nikitenko

18

다음 명령을 사용할 수도 있습니다.

pylint --disable=C0321  test.py

내 pylint 버전은 0.25.1입니다.


이것은 이제 레거시 기술입니다. 비활성화 된 경고의 기호 이름을 대신 사용하는 것이 좋습니다. 이것 좀 봐 답변을 .
Acumenus

--py3k플래그도 작동하지 않는 것 같습니다 :(
DylanYoung

흥미롭게도 rc 파일에 하며 실제로 문제가있는 경우 올바른 rc파일을 생성합니다 --generate-rcfile. 같은 일을하는 여러 가지가있는 코드를 좋아해야합니다. (
DylanYoung

18

이것은 FAQ입니다 .

4.1 특정 메시지를 로컬에서 비활성화 할 수 있습니까?

예,이 기능은 Pylint 0.11에 추가되었습니다. 이것은 추가하여 수행 할 수 있습니다
# pylint: disable=some-message,another-one 원하는 블록 레벨 또는 원하는 코드 라인의 끝에 .

4.2 특정 모듈에 대해서만 메시지를 비활성화하는 방법이 있습니까?

예, 파일 상단의 주석에 해당 옵션을 추가하여 모듈 수준에서 메시지를 비활성화하거나 활성화 할 수 있습니다 (전역 비활성화).

# pylint: disable=wildcard-import, method-hidden
# pylint: enable=too-many-lines

다음과 같은 방법으로 메시지를 비활성화 할 수 있습니다.

  • 숫자 ID : E1101 , E1102
  • 상징적 인 메시지가 no-member,undefined-variable
  • 수표 그룹의 이름. 당신은 그들을 잡을 수 있습니다pylint --list-groups .
  • 체크 카테고리 : C, R,W , 등
  • 로 모든 수표를 확인하십시오 all.

님 의 전체 메시지 목록은 문서를 참조하십시오 (또는 pylint --list-msgs터미널에서 실행 ) pylint. 문서는 또한 이 기능을 사용하는 방법에 대한 좋은 를 제공 합니다.


5

비활성화하려는 것을 비활성화하려면 한 줄만 추가하면됩니다. 예 :

#pylint: disable = line-too-long, too-many-lines, no-name-in-module, import-error, multiple-imports, pointless-string-statement, wrong-import-order

이것을 모듈의 # 1에 추가하십시오


4

누군가에게 도움이되는 경우 Visual Studio Code를 사용하는 경우 파일이 UTF8 인코딩이어야합니다. 파일을 생성하기 위해 pylint --generate-rcfile | out-file -encoding utf8 .pylintrcPowerShell에서 실행 했습니다.


0

당으로 pylint 문서, 가장 쉬운 방법이 사용하는 차트를 :

  • C 컨벤션 관련 확인
  • R 리팩토링 관련 점검
  • W 다양한 경고
  • 코드의 가능한 버그에 대한 E 오류
  • Fylint가 추가 처리를 수행하지 못하게하는 오류가 발생한 경우 치명적입니다.

따라서 다음을 사용할 수 있습니다.

pylint -j 0 --disable=I,E,R,W,C,F YOUR_FILES_LOC

-1

파이썬 구문은 한 줄에 세미콜론 (;)으로 구분 된 둘 이상의 문을 허용합니다. 그러나 각 줄을 하나의 문장으로 제한하면 사람이 프로그램을 읽을 때 프로그램의 논리를 더 쉽게 따를 수 있습니다.

따라서이 문제를 해결하는 또 다른 방법은 보푸라기 메시지가 왜 존재하는지 이해하고 한 줄에 둘 이상의 진술을하지 않는 것입니다.

예, 한 줄에 여러 문장을 작성하는 것이 더 쉬울 수 있지만 pylint는 여러분뿐만 아니라 다른 모든 독자를위한 것입니다.


-1

이것을 시도 할 수 있습니다 :

"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"
    ],
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.