मैं पाइलिंट चेतावनी को कैसे अक्षम कर सकता हूं?


267

मैं चेतावनी C0321 ("एक लाइन पर एक से अधिक कथन" को अक्षम करने की कोशिश कर रहा हूं - मैं अक्सर ifPylint 0.21.1 में (यदि यह मायने रखता है: 0.20 अचरज करता है) 1, आम 0.50.3, पायथन 2.6.6 (r266: 84292, 15 सितंबर 2010, 16:22:56))।

मैंने disable=C0321Pylint कॉन्फ़िगरेशन फ़ाइल में जोड़ने की कोशिश की है , लेकिन Pylint वैसे भी इसकी रिपोर्ट करने पर जोर देता है। उस रेखा (जैसे पर बदलाव disable=0321या disable=C321) त्रुटियों के रूप में चिह्नित किये जाते हैं, इसलिए 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
धन्यवाद, लेकिन यह पहले से ही है, [संदेश नियंत्रण] अनुभाग में जैसा कि ऊपर दिखाया गया है। फिर भी नजरअंदाज कर दिया।
हेड Geek

6
@ हेड गीक: ठीक है, यह मेरे लिए काम करता है। ~/.pylintrcदो लाइनों के साथ, [MESSAGES CONTROL]और disable=C0321। जो उस संदेश को रोकता है।
क्रिस मॉर्गन

अजीब ... PyLint का सटीक संस्करण?
हेड गीक

@ हेड गीक: 0.21.3, एस्टिंग 0.20.3 और आम 0.52.1 वास्तव में (नवीनतम जब मैंने इसे स्थापित किया था, तो आप की तुलना में हाल ही में)
क्रिस मॉर्गन

1
@ क्रिस मॉर्गन: आह। संभवतः एक बग जो पहले से तय था, फिर - मैं उबंटू के भंडार से संस्करण का उपयोग कर रहा हूं। धन्यवाद!
हेड गीक

165

मुझे ग्रहण का उपयोग करने में यह समस्या हुई और इसे इस प्रकार हल किया:

पाइलिंट फ़ोल्डर (जैसे C:\Python26\Lib\site-packages\pylint) में, शिफ्ट को दबाए रखें, राइट-क्लिक करें और उस फ़ोल्डर में विंडोज़ कमांड खोलने का चयन करें। प्रकार:

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

यह standard.rcकॉन्फ़िगरेशन फ़ाइल बनाता है । इसे नोटपैड में और उसके नीचे खोलें [MESSAGES CONTROL], असहज करें disable=और उस संदेश आईडी को जोड़ें जिसे आप अक्षम करना चाहते हैं, जैसे:

disable=W0511, C0321

फ़ाइल को सहेजें, और ग्रहण-> विंडो-> वरीयताओं में-> PyDev-> pylint, तर्क बॉक्स में, टाइप करें:

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

अब यह काम करना चाहिए ...


आप अपने कोड के शीर्ष पर एक टिप्पणी भी जोड़ सकते हैं जिसे pylint द्वारा व्याख्या किया जाएगा:

# pylint: disable=C0321

सभी pylint संदेश कोड के लिए लिंक


--disable-ids=C0321तर्क बॉक्स में उदा जोड़ना काम नहीं करता है। सभी उपलब्ध पाइलिंट संदेश शब्दकोश में संग्रहीत किए जाते हैं _messages, pylint.utils.MessagesHandlerMixInवर्ग के एक उदाहरण की विशेषता । जब तर्क के साथ पाइलिंट चल रहा हो --disable-ids=...(कम से कम बिना कॉन्फिग फाइल), तो यह डिक्शनरी शुरू में खाली है, पाइलिंट के भीतर एक कीरर अपवाद को उठाते हुए pylint.utils.MessagesHandlerMixIn.check_message_id()। , कंसोल आइकॉन के अलावा कंसोल विकल्पों में से पाइलिंट कंसोल का चयन करें।)


2
नहीं, यह वास्तव में नहीं होना चाहिए। 1) यह ग्रहण का संदर्भ देता है, जो कि पूछे गए सवाल 2 के लिए अप्रासंगिक है। यह विरासत संदेश कोड के माध्यम से अक्षम करने की सिफारिश करता है। मैं समस्या के सबसे सरल समाधान के लिए अपने जवाब की सिफारिश करूंगा , या अधिक विवरण के लिए क्रिस जॉनसन के जवाब पर
imolit

153

Pylint v। 0.25.3 से शुरू होकर, आप उन सभी कोड नंबरों को याद रखने के बजाय चेतावनी को अक्षम करने के लिए प्रतीकात्मक नामों का उपयोग कर सकते हैं । उदाहरण के लिए:

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

यह शैली गुप्त त्रुटि कोड की तुलना में अधिक शिक्षाप्रद है, और अधिक व्यावहारिक भी है क्योंकि पाइलिंट के नए संस्करण केवल प्रतीकात्मक नाम का उत्पादन करते हैं, न कि त्रुटि कोड का।

प्रतीकात्मक नाम और कोड के बीच पत्राचार यहाँ पाया जा सकता है

एक अक्षम टिप्पणी को उसी ब्लॉक में आने वाली हर चीज के लिए अक्षम करने के लिए, अपनी लाइन पर डाला जा सकता है। वैकल्पिक रूप से, इसे उस पंक्ति के अंत में डाला जा सकता है जिसके लिए इसे लागू करना है।

यदि पाइलिंट आउटपुट Locally disablingसंदेश देता है, तो आप locally-disabled पहले उपर्युक्त उदाहरण के रूप में अक्षम को शामिल करके उनसे छुटकारा पा सकते हैं ।


20
लेकिन # pylint: disable=fooइनलाइन डालने से मुझे बहुत लंबी लाइन मिल जाती है, इसलिए अब मुझे जोड़ने की जरूरत है , line-too-long! जीभ में गाल; यह वही था जो मुझे चाहिए था और मेरे मुद्दे को हल करता है। धन्यवाद!
dwanderson

उपयोग करने के लिए वास्तविक तार के साथ सूची: gist.github.com/m451/965bb613177dd4fa896b815aa0e0e365
masi

81

किसी ब्लॉक में स्थानीय रूप से चेतावनी को निष्क्रिय करने के लिए, जोड़ें

# pylint: disable=C0321

उस ब्लॉक को।


5
यह एक विरासत तकनीक है और अब इसकी सिफारिश नहीं की जाती है। अन्य उत्तर देखें।
अक्यूमेनस

1
आपका मतलब है कि किसी को कोड संख्या के बजाय प्रतीकात्मक नाम का उपयोग करना चाहिए, हां?
थाकिस

5
हाँ। Imolit द्वारा जवाब वास्तव में यह शामिल किया गया।
एक्यूमेनस

2
प्रतीकात्मक नाम कैसे मिलता है? मेरा संपादक बाहर थूक देगा [pylint] C0111: Missing method docstring, इसलिए कोड नंबर ढूंढना आसान है, लेकिन प्रतीकात्मक नाम खोजने का मतलब है कि मुझे इसे देखना होगा।
एडम पार्किन

@AdamParkin मुझे अपने संदेश यहां मिले: pylint-messages.wikidot.com/all-messages
जीन-फ्रेंकोइस टी।

80

पाइलिंट से चेतावनी और त्रुटियों को अक्षम करने के कई तरीके हैं। किस एक का उपयोग करना है विश्व स्तर पर या स्थानीय रूप से आप अक्षमता को कैसे लागू करना चाहते हैं - एक महत्वपूर्ण डिजाइन निर्णय।

एकाधिक दृष्टिकोण

  1. एक या एक से अधिक pylintrcफ़ाइलों में।

इसमें ~/.pylintrcक्रिस मॉर्गन द्वारा वर्णित फ़ाइल (आपकी $ HOME निर्देशिका में) से अधिक शामिल है । Pylint आरसी फ़ाइलों के लिए खोज करेगा, एक मिसाल के साथ कि मान "फाइलें" को और अधिक अत्यधिक:

  • pylintrcवर्तमान कार्यशील निर्देशिका में एक फ़ाइल; या

  • यदि वर्तमान कार्यशील निर्देशिका पायथन मॉड्यूल में है (अर्थात इसमें एक __init__.pyफ़ाइल शामिल है ), पायथन मॉड्यूल के पदानुक्रम को तब तक खोजता है जब तक कोई pylintrcफ़ाइल नहीं मिल जाती है; या

  • पर्यावरण चर PYLINTRC द्वारा नामित फ़ाइल; या

  • यदि आपके पास एक घर निर्देशिका है जो नहीं है /root:

    • ~/.pylintrc; या

    • ~/.config/pylintrc; या

    • /etc/pylintrc

ध्यान दें कि इन फ़ाइलों में से अधिकांश का नाम है pylintrc- केवल फ़ाइल में~ एक अग्रणी डॉट है।

अपनी pylintrcफ़ाइल में, विशिष्ट पाइलिंट संदेशों को अक्षम करने के लिए लाइनें जोड़ें। उदाहरण के लिए:

[MESSAGES CONTROL]
disable=locally-disabled
  1. pylintकमांड लाइन से आगे अस्तबल, जैसा कि अबो और केयर्नवन द्वारा वर्णित है। ऐसा दिखता है pylint --disable=bad-builtin--disableअतिरिक्त वस्तुओं को दबाने के लिए दोहराएं ।

  2. इमोलिट द्वारा वर्णित के रूप में व्यक्तिगत पायथन कोड लाइनों से आगे की अक्षमताएं। ये दिखते हैं some statement # pylint: disable=broad-except(मूल स्रोत लाइन के अंत में अतिरिक्त टिप्पणी) और केवल वर्तमान लाइन पर लागू होते हैं । मेरा दृष्टिकोण हमेशा इन्हें कोड की अन्य लाइनों के अंत में रखना है ताकि वे ब्लॉक शैली के साथ भ्रमित न हों, नीचे देखें।

  3. आगे स्रोत फ़ाइलों को पूरा करने के लिए पायथन कोड के बड़े ब्लॉकों के लिए परिभाषित अन्य अक्षमताएं।

    • ये जैसे दिखते हैं # pragma pylint: disable=bad-whitespace( pragmaकुंजी शब्द पर ध्यान दें )।

    • ये प्राग्म के बाद हर लाइन पर लागू होते हैं । किसी फ़ाइल के शीर्ष पर इनका ब्लॉक लगाने से दमन पूरी फ़ाइल पर लागू होता है। फ़ाइल में समान ब्लॉक को कम करने से वे केवल ब्लॉक के बाद की लाइनों पर लागू होते हैं। मेरा दृष्टिकोण हमेशा इन्हें अपनी लाइन पर रखना है ताकि वे सिंगल-लाइन शैली के साथ भ्रमित न हों, ऊपर देखें।

    • जब एक दमन केवल कोड की अवधि के भीतर लागू होना चाहिए, तो दबाने को रोकने के लिए # pragma pylint: enable=bad-whitespaceउपयोग करें (अब उपयोग enableनहीं disable)।

ध्यान दें कि # pylintइस लाइन के लिए अक्षम करते समय एक पंक्ति के लिए अक्षम करना # pragma pylintसिंटैक्स का उपयोग करता है और इसके बाद सिंटैक्स का उपयोग करता है । नकल और पेस्ट करते समय ये विशेष रूप से भ्रमित करने में आसान होते हैं।

यह सब एक साथ डालें

मैं आमतौर पर इन तरीकों के मिश्रण का उपयोग करता हूं।

  • मैं ~/.pylintrcबिल्कुल वैश्विक मानकों के लिए उपयोग करता हूं - इनमें से बहुत कम।

  • मैं pylintrcप्रोजेक्ट-विशिष्ट मानकों के होने पर पायथन मॉड्यूल के भीतर विभिन्न स्तरों पर प्रोजेक्ट-स्तर का उपयोग करता हूं । खासकर जब आप किसी अन्य व्यक्ति या टीम से कोड ले रहे हों, तो आप पा सकते हैं कि वे उन सम्मेलनों का उपयोग करते हैं जिन्हें आप पसंद नहीं करते हैं, लेकिन आप कोड को फिर से काम नहीं करना चाहते हैं। इस स्तर पर सेटिंग्स रखने से उन प्रथाओं को अन्य परियोजनाओं में फैलाने में मदद नहीं मिलती है।

  • मैं एकल स्रोत फ़ाइलों के शीर्ष पर ब्लॉक स्टाइल प्रैग्मस का उपयोग करता हूं। मैं पाइलिंट मानकों के साथ विकास की गर्मी में भी प्रैग्मस को बंद करना (संदेशों को दबाना) पसंद करता हूं, मैं इससे सहमत नहीं हूं (जैसे "बहुत कम सार्वजनिक तरीके" - मुझे हमेशा कस्टम अपवाद कक्षाओं पर यह चेतावनी मिलती है) - लेकिन आपके द्वारा विकसित किए जाने के दौरान अधिक / शायद सभी Pylint संदेशों को देखने के लिए यह उपयोगी है। इस तरह से आप उन मामलों को पा सकते हैं जिन्हें आप एकल-पंक्ति के प्रैग्मस (नीचे देखें) से संबोधित करना चाहते हैं, या बस अगले डेवलपर के लिए टिप्पणियां जोड़ें कि यह समझाने के लिए कि इस मामले में चेतावनी क्यों ठीक है।

  • मैं ब्लॉक-शैली के कुछ प्रैग्मस को सक्षम करता हूं, तब भी जब कोड चेक करने के लिए तैयार होता है। मैं उनमें से कुछ का उपयोग करने की कोशिश करता हूं, लेकिन जब यह मॉड्यूल के लिए समझ में आता है, तो यह प्रलेखन के रूप में करना ठीक है। हालांकि मैं जितना संभव हो उतना कम छोड़ने की कोशिश करता हूं, अधिमानतः कोई नहीं।

  • मैं विशेष रूप से शक्तिशाली त्रुटियों को संबोधित करने के लिए एकल-लाइन-टिप्पणी शैली का उपयोग करता हूं। उदाहरण के लिए, यदि ऐसा कोई स्थान है जहां यह वास्तव में करने के लिए समझ में आता है except Exception as exc, तो मैंने # pylint: disable=broad-exceptउस लाइन को अधिक वैश्विक दृष्टिकोण के बजाय रखा क्योंकि यह एक अजीब अपवाद है और इसे मूल रूप से प्रलेखन के रूप में कहा जाना चाहिए।


पायथन में बाकी सभी चीजों की तरह, आप विभिन्न स्तरों पर अप्रत्यक्ष रूप से कार्य कर सकते हैं। मेरी सलाह यह सोचने की है कि आप किस स्तर पर हैं ताकि आप पाइलिंट के लिए बहुत उदार दृष्टिकोण के साथ समाप्त न हों।



1
अधिकांश भाग के लिए मैं एक वैश्विक गैर-रिक्त का उपयोग करने की वकालत नहीं कर सकता ~/.pylintrc। IMHO, कॉन्फ़िगरेशन आमतौर पर परियोजना से बंधा होना चाहिए, और इसलिए यह परियोजना के भीतर कहीं होना चाहिए। तभी इसे परियोजना के साथ नियंत्रित और साझा किया जा सकता है। इसे विफल करते हुए, एक क्लोन में मुद्रण संदेशों के बिना बाहर निकलने के लिए पाइलिंट के लिए आवश्यक अनुकूलन की कमी हो सकती है।
एक्यूमेनस

@ABB मुझे लगता है कि समझदार है
क्रिस जॉनसन

3
@ क्रिस जॉनसन उपसर्ग pragma पूरी तरह से अनावश्यक लगता है। उदाहरण के लिए, मैं # pylint: disable=missing-docstringअपनी फ़ाइल के शीर्ष पर है, और यह फ़ाइल के संपूर्ण शेष पर लागू होता है। कृपया pragmaअपने उत्तर से उपसर्ग की जाँच करें और हटा दें ।
एक्यूमेनस

Pylint FAQ किसी भी व्यावहारिक के बारे में नहीं लिखता है। ( pylint.pycqa.org/en/latest/… ): आप फ़ाइल के शीर्ष पर एक टिप्पणी में संबंधित विकल्प जोड़कर मॉड्यूल स्तर पर संदेश को अक्षम या सक्षम (वैश्विक रूप से अक्षम) कर सकते हैं: # pylint: "वाइल्डकार्ड-" आयात, विधि-छिपी # पाइलिंट: सक्षम = बहुत-बहुत-लाइनें
यारोस्लाव

18

आप निम्न कमांड का भी उपयोग कर सकते हैं:

pylint --disable=C0321  test.py

मेरा pylint संस्करण 0.25.1 है।


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

यह --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

यदि यह विज़ुअल स्टूडियो कोड का उपयोग कर रहा है, तो यह किसी को मदद करता है, यह फ़ाइल को UTF8 एन्कोडिंग में होने की उम्मीद करता है। फ़ाइल जनरेट करने के लिए, मैं pylint --generate-rcfile | out-file -encoding utf8 .pylintrcPowerShell में भागा ।


0

Pylint प्रलेखन के अनुसार , इस चार्ट का उपयोग करना सबसे आसान है :

  • C अधिवेशन संबंधी जाँच
  • संबंधित जाँचों को फिर से करना
  • डब्ल्यू विभिन्न चेतावनियाँ
  • ई त्रुटियों, कोड में संभावित कीड़े के लिए
  • एफ घातक, यदि कोई त्रुटि हुई जो पाइलिंट को आगे की प्रक्रिया करने से रोकती है।

तो एक का उपयोग कर सकते हैं:

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

-1

पायथन सिंटैक्स एक लाइन पर एक से अधिक कथन की अनुमति देता है, जिसे सेमीकोलन (;) द्वारा अलग किया जाता है। हालाँकि, प्रत्येक पंक्ति को एक कथन तक सीमित करने से मानव के लिए कार्यक्रम के तर्क का पालन करना आसान हो जाता है जब वह इसके माध्यम से पढ़ता है।

इसलिए, इस मुद्दे को हल करने का एक और तरीका है, यह समझना कि लिंटर संदेश क्यों है और एक पंक्ति में एक से अधिक कथन नहीं रखे गए हैं।

हां, आपको प्रति पंक्ति कई कथन लिखने में आसानी हो सकती है, हालाँकि, पाइलिंट आपके कोड के हर दूसरे पाठक के लिए है न कि केवल आपके लिए।


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