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: F841은 F841줄에서 오류 만 무시 함을 의미 합니다.
— 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_FAST및 POP_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.