मैं एक बयान को अनदेखा करने के लिए 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 के लिए एक पैच देखना चाहूंगा!
किम्विस


2
यह एक लंबे समय से चली आ रही बग है। इसे ठीक करने के लिए व्यक्ति को पीफ्लेक्स लेखक द्वारा व्यक्तिगत रूप से हस्ताक्षरित एक बीयर मिलेगी।
फिल फ्रॉस्ट

जवाबों:


215

यदि आप इसके बजाय flake8 का उपयोग कर सकते हैं - जो pyflakes के साथ-साथ pep8 चेकर को भी लपेटता है - के साथ समाप्त होने वाली रेखा

# NOQA

(जिसमें स्थान महत्वपूर्ण है - कोड के अंत और उसके बीच का 2 रिक्त स्थान #, इसके और NOQAपाठ के बीच ) उस रेखा पर किसी भी त्रुटि को अनदेखा करने के लिए चेकर को बताएगा।


यदि केवल EL6 के लिए कुछ रेपो से इसे प्राप्त करने का एक तरीका था :) - मुझे लगता है कि मुझे इसे स्वयं आरपीएम में लपेटना होगा।
किम्विस

13
अच्छा है, लेकिन pyflakes के लिए एक समाधान नहीं
ezdazuzena

7
टिप्स: इस लाइन # flake8: noqaको जोड़ने से flake8 पूरी फाइल के लिए सत्यापन को नजरअंदाज कर देगा।
Reorx

3
# noqaकेवल कुछ चेतावनियों / त्रुटियों को अनदेखा करता है, लेकिन सभी को नहीं - इससे निपटने के लिए, एक वर्कअराउंड में pypi.python.org/pypi/flake8-respect-noqa
Mark

8
टिप्स का # noqa: F841अर्थ F841है लाइन में केवल त्रुटि की अनदेखी करना ।
सांगमिनकिम

47

मुझे पता है कि कुछ समय पहले इस पर सवाल उठाया गया था और पहले ही इसका जवाब दिया जा चुका है।

लेकिन मैं वह जोड़ना चाहता था जो मैं आमतौर पर उपयोग करता हूं:

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

यह वास्तव में हम क्या कर समाप्त हो गया है। (खैर, यह और एक silence pyflakesटिप्पणी के साथ लाइनों पर त्रुटियों को अनदेखा करने के लिए pyflakes पार्सिंग ।) धन्यवाद!
एक भुगतान किया बेवकूफ

मुझे लगता है कि assertइस मामले में जाँचकर्ता को चुप कराने के लिए कथन पर्याप्त है। अच्छी चाल है, वैसे।
एंटोन स्ट्रॉगनॉफ

क्या यह कहीं भी प्रलेखित है?
Håken Lid

7

हां, दुर्भाग्य से dimod.org सभी अच्छाइयों के साथ नीचे है।

Pyflakes कोड को देखकर, यह मुझे लगता है कि pyflakes को डिज़ाइन किया गया है ताकि इसे "एम्बेडेड फास्ट चेकर" के रूप में उपयोग करना आसान हो।

कार्यक्षमता को अनदेखा करने के लिए आपको अपने स्वयं के लिखने की आवश्यकता होगी जो कि पाइफ्लेक्स चेकर को बुलाता है।

यहाँ आप एक विचार पा सकते हैं: http://djangosnippets.org/snippets/1762/

ध्यान दें कि उपरोक्त स्निपेट केवल टिप्पणियों के लिए उसी स्थान पर हैं। पूरे ब्लॉक को अनदेखा करने के लिए आप नोड डॉकिंग के आधार पर ब्लॉक डॉकस्ट्रिंग और फ़िल्टर में 'pyflakes: अनदेखा' जोड़ना चाह सकते हैं।

सौभाग्य!


मैं सभी प्रकार के स्थिर कोड विश्लेषण के लिए पॉकेट-लिंट का उपयोग कर रहा हूं। यहाँ जेब-लिंट में चिड़ियों को नज़रअंदाज़ करने के लिए किए गए बदलाव हैं: https://code.launchpad.net/~adiroiban/pocket-lint/907742/+merge/102882


1
divmod.org नीचे है, लेकिन लॉन्चपैड पर माल मिल सकता है ( code.launchpad.net/divmod.org )।
thebjorn

6

जीथब इश्यू टिकट से उद्धृत करने के लिए :

यदि फिक्स अभी भी आ रहा है, तो यह इस तरह से काम किया जा सकता है, अगर आप सोच रहे हैं:

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

पदार्थ _unittest और _WritelnDecorator संस्थाओं (मॉड्यूल, कार्य, वर्ग) के साथ आप की जरूरत है

- डेमूवर


और _WritelnDecorator;बिल्कुल कुछ भी नहीं, सही है? इसलिए मैं इसका उपयोग अप्रयुक्त चर को अनदेखा करने के लिए पाइलफेक प्राप्त करने के लिए कर सकता हूं जो वास्तव में एक अलग लाइन पर चर को सूचीबद्ध करके eval या numexpr स्ट्रिंग्स के अंदर उपयोग किए जाते हैं ? क्या अर्धविराम भी आवश्यक है?
endolith

1
वास्तव में, इसका उपयोग करते हुए dis.dis, यह स्पष्ट रूप से एक लाइन पर प्रत्येक चर के लिए LOAD_FASTऔर POP_TOP(इसे स्टैक पर रखता है और फिर स्टैक से निकाल देता है?), इसलिए यह कुछ भी नहीं कर रहा है। से बेहतर है assert, यद्यपि।
endolith

अर्ध-बृहदान्त्र आवश्यक नहीं है। आशाओं को अनुकूलित स्विच के माध्यम से अनदेखा किया जा सकता है ताकि पूरी तरह से बेकार न हो।
ग्रिंगो सुवे

6

यहाँ pyflakes के लिए एक बंदर पैच है जो एक # bypass_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
मुझे चिड़ियों को त्रुटियों को अनदेखा करने का एक तरीका दिख रहा है, न कि मेरे कोड को खराब करने का एक तरीका है :)
किम्विस

इसके अलावा, यह कुछ ऐसा करने का कोई हल नहीं है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 ...

मूल रूप से यह लाइन नंबरों को नोट करता है और गतिशील रूप से इसे एक regex बनाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.