আমি কীভাবে পাইফ্লেক্সকে কোনও বিবৃতি উপেক্ষা করতে পারি?


137

আমাদের প্রচুর মডিউল দিয়ে শুরু হয়:

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

... এবং এটি পুরো ফাইলে একমাত্র পাইফ্লেকস সতর্কতা:

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

আমি কীভাবে পাইফ্লেক্সকে এড়িয়ে যাব?

(সাধারণত আমি ডক্সটি পড়তে যাই তবে লিঙ্কটি নষ্ট হয়ে গেছে nobody কারও উত্তর না থাকলে আমি কেবল উত্সটি পড়ব))


4
আমি এর জন্য পাইফ্লেক্সের জন্য একটি প্যাচ দেখতে চাই!
কিমভাইস


2
এটি একটি দীর্ঘস্থায়ী পাইফ্লেক্স বাগ। এটি ঠিক করার জন্য ব্যক্তি পাইফ্লেক্স লেখকের দ্বারা স্বাক্ষরিত একটি বিয়ার পাবেন।
ফিল ফ্রস্ট

উত্তর:


215

আপনি যদি এর পরিবর্তে flake8 ব্যবহার করতে পারেন - যা পাইফ্লেক্সগুলি পাশাপাশি পপ 8 চেকার মোড়ক করে - এর সাথে শেষ হওয়া একটি লাইন

# NOQA

(যার মধ্যে স্থানটি তাৎপর্যপূর্ণ - কোডের শেষের এবং 2 টির মধ্যে দুটি স্পেস, এর মধ্যে একটি #এবং NOQAপাঠ্যের মধ্যে) চেকারকে সেই লাইনের কোনও ত্রুটি উপেক্ষা করতে বলবে।


যদি EL6 এর জন্য কোনও রেপো থেকে কেবল এখানে আসার উপায় ছিল তবে :) - আমি মনে করি এটি নিজেকে আমার আরপিএমের মধ্যে আবদ্ধ করতে হবে।
কিমভাইস 9:54

13
পাইফ্লেক্সের জন্য দুর্দান্ত তবে সমাধান নয়
এজাদুজেন

7
টিপস: এই লাইনটি যুক্ত # flake8: noqaকরুন পুরো ফাইলটির বৈধতা উপেক্ষা করতে flake8 কে বলবে।
রিওরেক্স

3
# noqaএই মোকাবেলা করার জন্য, একটি ওয়ার্কঅ্যারাউন্ড ইনস্টল জড়িত / এ প্যাকেজ ব্যবহার করে - শুধুমাত্র নির্দিষ্ট সতর্কবার্তা / ত্রুটি উপেক্ষা করে, কিন্তু সব না pypi.python.org/pypi/flake8-respect-noqa
মার্ক

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.

এটি আসলে আমরা শেষ করেছিলাম। (ভাল, এই এবং একটি pyflakes বিশ্লেষণ একটি silence pyflakesমন্তব্য লাইনে ত্রুটি উপেক্ষা। আউটপুট ।) ধন্যবাদ!
একটি অর্থ প্রদান

আমি মনে করি assertএই ক্ষেত্রে চেকারকে চুপ করার জন্য বিবৃতি যথেষ্ট। ভাল কৌশল, উপায়।
আন্তন স্ট্রোগনফ

এই কোথাও নথিভুক্ত করা হয়?
হেকেন লিড

7

হ্যাঁ, দুর্ভাগ্যক্রমে ডিমোড.অর্গ সব গুডির সাথে একসাথে রয়েছে।

পাইফ্লেক্স কোডটি দেখে আমার কাছে মনে হয় পাইফ্লেকগুলি এমনভাবে তৈরি করা হয়েছে যাতে এটি "এম্বেডেড ফাস্ট চেকার" হিসাবে ব্যবহার করা সহজ হবে।

কার্যকারিতা উপেক্ষা করার জন্য আপনার নিজের লিখতে হবে যা পাইফ্লেক্স চেকারকে কল করে।

এখানে আপনি একটি ধারণা পেতে পারেন: http://djangosnippets.org/snippets/1762/

মনে রাখবেন যে উপরের স্নিপেটটি কেবল একই লাইনের মন্তব্যের জন্য। পুরো ব্লক উপেক্ষা করার জন্য আপনি ব্লক ডক্ট্রিংয়ে নাইড.ডোকের উপর ভিত্তি করে ফিল্টার 'পাইফ্লেকস: উপেক্ষা' যুক্ত করতে পারেন।

শুভকামনা!


আমি স্ট্যাটিক কোডের সমস্ত বিশ্লেষণের জন্য পকেট-লিন্ট ব্যবহার করছি। এখানে উপেক্ষা pyflakes জন্য পকেটের তিসি তৈরি পরিবর্তনগুলি হল: https://code.launchpad.net/~adiroiban/pocket-lint/907742/+merge/102882


1
divmod.org ডাউন, তবে গুডিজটি লঞ্চপ্যাডে পাওয়া যাবে ( কোড.লাঞ্চপ্যাড . net / ডিডমোড.অর্গ )।
thebjorn

6

গিথুব ইস্যুর টিকিট থেকে উদ্ধৃতি দিতে :

ঠিকঠাকটি এখনও আসার সময়, আপনি যদি ভাবছেন তবে এইভাবে কাজ করা যেতে পারে:

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

আপনার প্রয়োজন সত্তা (মডিউল, ফাংশন, ক্লাস) সহ সাবস্টিটিউড _উইনটেস্ট এবং _ রাইটেলনডেক্টর

- ডেমোউওর


এবং _WritelnDecorator;একেবারে কিছুই না, তাই না? তাই আমি এই ব্যবহার করতে পারেন pyflakes পেতে অব্যবহৃত ভেরিয়েবল যে আসলে ভিতরে ব্যবহার করা হয় উপেক্ষা করার Eval বা numexpr একটি পৃথক লাইনে ভেরিয়েবল তালিকাবদ্ধ করে স্ট্রিং? সেমিকোলনটি কি প্রয়োজনীয়?
এন্ডোলিথ

1
আসলে, ব্যবহার dis.dis, এই দৃশ্যত একটি করে LOAD_FASTএবং POP_TOPনিজে একটি লাইন প্রতিটি পরিবর্তনশীল জন্য (স্ট্যাক রাখে এটা এবং তারপর স্ট্যাকের থেকে সরিয়ে ফেলা হবে?), তাই এটি কিছুই করছে। assertযদিও এর চেয়ে ভাল ।
এন্ডোলিথ

আধা-কোলন প্রয়োজনীয় নয়। জোর করে অপ্টিমাইজ স্যুইচ করা একেবারেই অকেজো নয় বলে উপেক্ষা করা যেতে পারে।
গ্রিঙ্গো সুভেভ

6

পাইফ্লেক্সের জন্য এখানে একটি বানরের প্যাচ দেওয়া হয়েছে যা একটি # 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


আমি কী পরিবর্তন করেছি তা নিশ্চিত নই বা আসল কোডে কোনও ত্রুটি ঘটেছে তবে আমার পাইফ্লেক্সের সংস্করণে (০.৯.২) text_lineno = args[0] - 1এটি পরিবর্তন করতে হবে text_lineno = args[0].lineno - 1। আমি প্রতিফলিত করতে এই উত্তরটি আপডেট করার প্রস্তাব দিই।
জন লুঞ্জার

1

আপনি এর সাথে আমদানিও করতে পারেন __import__। এটি অজগর নয়, তবে পাইফ্লেকস আপনাকে আর সতর্ক করে না। জন্য ডকুমেন্টেশন__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 ...

মূলত এটি লাইন নম্বরগুলি নোট করে এবং গতিশীলভাবে এটি একটি রেইজেক্স তৈরি করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.