Pyflakes가 문장을 무시하도록하려면 어떻게해야합니까?


137

많은 모듈이 다음으로 시작합니다.

try:
    import json
except ImportError:
    from django.utils import simplejson as json  # Python 2.4 fallback.

... 그리고 전체 파일에서 유일한 Pyflakes 경고입니다.

foo/bar.py:14: redefinition of unused 'json' from line 12

Pyflakes가 이것을 무시하도록하려면 어떻게해야합니까?

(일반적으로 나는 문서를 읽을 것이지만 링크가 끊어졌습니다. 아무도 대답이 없으면 소스를 읽을 것입니다.)


4
PyFlakes에 대한 패치를보고 싶습니다!
Kimvais


2
이것은 오래된 pyflakes 버그입니다. 그것을 고칠 사람은 pyflakes 작가가 개인적으로 서명 한 맥주를 얻습니다.
Phil Frost

답변:


215

flake8을 대신 사용할 수 있다면 -pep8 검사기뿐만 아니라 pyflakes를 감싸는-

# NOQA

(공백이 중요한 경우-코드 끝과 코드 #사이와 NOQA텍스트 사이에 2 개의 공백이 있음 )은 검사기에게 해당 행의 오류를 무시하도록 지시합니다.


EL6에 대한 일부 리포지토리에서 이것을 얻을 수있는 방법 만 있다면 :)-이것을 rpm으로 직접 감싸 야한다고 생각합니다.
Kimvais

13
멋지지만 pyflakes를위한 해결책은 아닙니다
ezdazuzena

7
팁 :이 줄 # flake8: noqa을 추가하면 flake8에게 전체 파일의 유효성 검사를 무시하도록 지시합니다.
Reorx

3
# noqa특정 경고 / 오류 만 무시하지만 전부는 아닙니다.이 문제를 해결하려면 pypi.python.org/pypi/flake8-respect-noqa에
Mark

8
# noqa: F841F841줄에서 오류 만 무시 함을 의미 합니다.
SangminKim 2019

47

나는 이것이 얼마 전에 질문을 받았으며 이미 답변되었다는 것을 알고 있습니다.

그러나 나는 일반적으로 사용하는 것을 추가하고 싶었습니다.

try:
    import json
    assert json  # silence pyflakes
except ImportError:
    from django.utils import simplejson as json  # Python 2.4 fallback.

이것이 실제로 우리가 한 일입니다. (글쎄,이 구문 분석 pyflakes 출력은와 라인에 오류 무시 silence pyflakes코멘트를.) 감사합니다!
유료 괴상한

assert이 경우 진술서가 체커를 침묵시키기에 충분 하다고 생각 합니다. 그건 그렇고 멋진 트릭입니다.
Anton Strogonoff

이것은 어디에나 문서화되어 있습니까?
Håken Lid

7

그러나 안타깝게도 dimod.org는 모든 혜택과 함께 사용됩니다.

pyflakes 코드를 살펴보면 pyflakes가 "내장 된 빠른 검사기"로 쉽게 사용할 수 있도록 pyflakes가 설계된 것 같습니다.

무시 기능을 구현하려면 pyflakes checker를 호출하는 자체 작성해야합니다.

여기에서 아이디어를 찾을 수 있습니다 : http://djangosnippets.org/snippets/1762/

위의 스 니펫은 주석의 경우에만 같은 줄에 배치됩니다. 전체 블록을 무시하기 위해 블록 docstring에 'pyflakes : ignore'를 추가하고 node.doc를 기준으로 필터링 할 수 있습니다.

행운을 빕니다!


모든 종류의 정적 코드 분석에 포켓 린트를 사용하고 있습니다. pyflakes를 무시하기 위해 pocket-lint에서 변경된 내용은 다음과 같습니다. https://code.launchpad.net/~adiroiban/pocket-lint/907742/+merge/102882


1
divmod.org는 다운되었지만 장점은 런치 패드 ( code.launchpad.net/divmod.org ) 에서 찾을 수 있습니다 .
thebjorn

6

github 이슈 티켓 에서 인용하려면 :

수정 프로그램이 계속 제공되는 동안 궁금한 점이 있으면 다음과 같이 해결할 수 있습니다.

try:
    from unittest.runner import _WritelnDecorator
    _WritelnDecorator; # workaround for pyflakes issue #13
except ImportError:
    from unittest import _WritelnDecorator

필요한 엔티티 (모듈, 함수, 클래스)가있는 Substitude _unittest 및 _WritelnDecorator

- 디 무우 어


그리고 _WritelnDecorator;절대적으로 아무것도하지 않습니까? 그래서 이것을 사용하여 pyflakes가 변수를 별도의 줄에 나열하여 실제로 eval 또는 numexpr 문자열 내에서 사용되는 사용되지 않는 변수를 무시하도록 할 수 있습니까? 세미콜론도 필요합니까?
endolith

1
실제로,을 사용 dis.dis하면 분명히 행의 각 변수에 대해 LOAD_FASTPOP_TOP변수마다 스택에 넣고 스택에서 제거합니까? 그래서 아무것도하지 않습니다. assert그러나 보다 낫다 .
endolith

세미콜론이 필요하지 않습니다. 최적화 스위치를 통해 어설 션을 무시할 수 있으므로 완전히 쓸모가 없습니다.
Gringo Suave

6

다음은 # bypass_pyflakes주석 옵션 을 추가하는 pyflakes의 원숭이 패치입니다 .

bypass_pyflakes.py

#!/usr/bin/env python

from pyflakes.scripts import pyflakes
from pyflakes.checker import Checker


def report_with_bypass(self, messageClass, *args, **kwargs):
    text_lineno = args[0] - 1
    with open(self.filename, 'r') as code:
        if code.readlines()[text_lineno].find('bypass_pyflakes') >= 0:
            return
    self.messages.append(messageClass(self.filename, *args, **kwargs))

# monkey patch checker to support bypass
Checker.report = report_with_bypass

pyflakes.main()

이것을로 저장하면을 (를)로 bypass_pyflakes.py호출 할 수 있습니다 python bypass_pyflakes.py myfile.py.

http://chase-seibert.github.com/blog/2013/01/11/bypass_pyflakes.html


변경된 것이 무엇인지 또는 원래 코드에 오류가 있는지 확실하지 않지만 내 버전의 pyflakes (0.9.2)에서 text_lineno = args[0] - 1로 변경해야 text_lineno = args[0].lineno - 1합니다. 이를 반영하여이 답변을 업데이트하는 것이 좋습니다.
존 런저

1

로 가져올 수도 있습니다 __import__. pythonic은 아니지만 pyflakes는 더 이상 경고하지 않습니다. 에 대한 설명서를__import__ 참조하십시오 .

try:
    import json
except ImportError:
    __import__('django.utils', globals(), locals(), ['json'], -1)

40
나는 pyflakes가 오류를 무시하도록하는 방법을 찾고 있습니다. 추하게 내 코드 :
Kimvais

또한, 이것은 다음과 같은 일을 할 때 해결책이 아닙니다from foo import bar
ezdazuzena

0

나는 약간의 awk마법을 가진 작은 쉘 스크립트를 만들어 나를 도와주었습니다. 이것으로 import typing, from typing import또는 #$(나중에 나중에 사용하고있는 특별한 주석) 이있는 모든 줄 은 제외됩니다 ( $1파이썬 스크립트의 파일 이름입니다)

result=$(pyflakes -- "$1" 2>&1)

# check whether there is any output
if [ "$result" ]; then

    # lines to exclude
    excl=$(awk 'BEGIN { ORS="" } /(#\$)|(import +typing)|(from +typing +import )/ { print sep NR; sep="|" }' "$1")

    # exclude lines if there are any (otherwise we get invalid regex)
    [ "$excl" ] &&
        result=$(awk "! /^[^:]+:(${excl}):/" <<< "$result")

fi

# now echo "$result" or such ...

기본적으로 줄 번호를 기록하고 정규식을 동적으로 만듭니다.

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