ฉันจะปิดคำเตือน Pylint ได้อย่างไร


267

ฉันกำลังพยายามปิดการใช้งานคำเตือน C0321 ("คำสั่งมากกว่าหนึ่งคำสั่งในบรรทัดเดียว" - ฉันมักจะใส่ifคำสั่งที่มีผลลัพธ์บรรทัดเดียวสั้น ๆ ในบรรทัดเดียวกัน) ใน Pylint 0.21.1 (ถ้ามันสำคัญ: astng 0.20 1, 0.50.3 ทั่วไป, Python 2.6.6 (r266: 84292, 15 กันยายน 2010, 16:22:56))

ฉันได้ลองเพิ่มdisable=C0321ในไฟล์การกำหนดค่า Pylint แต่ Pylint ยืนยันในการรายงานต่อไป การเปลี่ยนแปลงในบรรทัดนั้น (เช่นdisable=0321หรือdisable=C321) ถูกตั้งค่าสถานะเป็นข้อผิดพลาดดังนั้น Pylint จึงจดจำตัวเลือกได้อย่างถูกต้องมันเป็นเพียงการเพิกเฉย

นี่เป็นข้อผิดพลาด Pylint หรือฉันกำลังทำอะไรผิดหรือเปล่า? มีวิธีแก้ไขไหม? ฉันอยากกำจัดเสียงนี้บ้าง


1
มีวิธีแก้ไขปัญหาที่ดีถ้าคุณต้องการปิดการใช้งานรหัสบรรทัดเดียวไม่ใช่ข้อผิดพลาดทั้งหมด
Le Droid

คำตอบ:


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=เส้น / s [MESSAGES CONTROL]ในนั้นภายในส่วน


1
ขอบคุณ แต่มันได้ทำไปแล้วในส่วน [MESSAGES CONTROL] ดังที่แสดงไว้ด้านบน ยังคงเพิกเฉย
Head Geek

6
@Head Geek: ดีมันใช้งานได้สำหรับฉัน ~/.pylintrcมีสองเส้นและ[MESSAGES CONTROL] disable=C0321ที่ป้องกันข้อความนั้น
Chris Morgan

แปลก ... PyLint รุ่นเดียวกันหรือไม่
Head Geek

@Head Geek: 0.21.3, astng 0.20.3 และ 0.52.1 ทั่วไปจริง (ล่าสุดเมื่อฉันติดตั้งมันผ่านมามากกว่าคุณ)
คริสมอร์แกน

1
@Chris Morgan: อา อาจเป็นข้อผิดพลาดที่ได้รับการแก้ไขแล้ว - ฉันใช้รุ่นจากที่เก็บของ Ubuntu ขอบคุณ!
Head Geek

165

ฉันมีปัญหาในการใช้Eclipseและแก้ไขได้ดังนี้

ในโฟลเดอร์ pylint (เช่นC:\Python26\Lib\site-packages\pylint) กด shift ค้างไว้คลิกขวาแล้วเลือกเปิดคำสั่ง windows ในโฟลเดอร์นั้น ประเภท:

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

สิ่งนี้จะสร้างstandard.rcไฟล์กำหนดค่า เปิดใน notepad และภายใต้[MESSAGES CONTROL]uncomment disable=และเพิ่ม ID ข้อความที่คุณต้องการปิดการใช้งานเช่น:

disable=W0511, C0321

บันทึกไฟล์และใน Eclipse-> window-> preferences-> PyDev-> pylint ในกล่องอาร์กิวเมนต์ให้พิมพ์:

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

ตอนนี้มันควรจะทำงาน ...


นอกจากนี้คุณยังสามารถเพิ่มความคิดเห็นที่ด้านบนของรหัสของคุณที่จะถูกตีความโดย pylint:

# pylint: disable=C0321

เชื่อมโยงไปยังรหัสข้อความ pylintทั้งหมด


การเพิ่มเช่น--disable-ids=C0321ในกล่องอาร์กิวเมนต์ไม่ทำงาน ข้อความ pylint ที่มีอยู่ทั้งหมดจะถูกเก็บไว้ในพจนานุกรม_messagesซึ่งเป็นแอตทริบิวต์ของอินสแตนซ์ของpylint.utils.MessagesHandlerMixInคลาส เมื่อเรียกใช้ไพลินด้วยอาร์กิวเมนต์--disable-ids=...(อย่างน้อยไม่มีไฟล์กำหนดค่า) พจนานุกรมนี้จะว่างเปล่าในตอนแรกเพิ่มข้อยกเว้น KeyError ภายในไพลิน ( pylint.utils.MessagesHandlerMixIn.check_message_id()ใน Eclipse คุณสามารถเห็นข้อความแสดงข้อผิดพลาดนี้ใน Pylint Console (หน้าต่าง - แสดงมุมมอง - คอนโซล เลือก Pylint console จากตัวเลือกคอนโซลนอกเหนือจากไอคอนคอนโซล)


2
ไม่ไม่ควรทำ 1) มันอ้างอิง Eclipse ซึ่งไม่เกี่ยวข้องกับคำถามที่ถาม 2) แนะนำให้ปิดใช้งานผ่านรหัสข้อความดั้งเดิม ฉันจะแนะนำคำตอบของฉันสำหรับวิธีแก้ปัญหาที่ง่ายที่สุดหรือคำตอบของ Chris Johnsonสำหรับรายละเอียดเพิ่มเติม
ลอกเลียนแบบ

153

เริ่มต้นจาก pylint v. 0.25.3 คุณสามารถใช้ชื่อสัญลักษณ์สำหรับการปิดใช้งานคำเตือนแทนที่จะต้องจำหมายเลขรหัสเหล่านั้นทั้งหมด เช่น:

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

สไตล์นี้มีประโยชน์มากกว่าโค้ดระบุความผิดพลาดแบบลับและยังมีประโยชน์มากกว่าเนื่องจาก Pylint เวอร์ชั่นใหม่จะแสดงเฉพาะชื่อสัญลักษณ์ไม่ใช่รหัสข้อผิดพลาด

จดหมายระหว่างชื่อสัญลักษณ์และรหัสสามารถพบได้ที่นี่

ความคิดเห็นปิดการใช้งานสามารถแทรกในบรรทัดของตัวเองโดยใช้ปิดการใช้งานกับทุกสิ่งที่เกิดขึ้นหลังจากในบล็อกเดียวกัน หรือสามารถแทรกที่ส่วนท้ายของบรรทัดที่ต้องการใช้

หากข้อความ pylint แสดงผลLocally disablingคุณสามารถกำจัดข้อความดังกล่าวได้โดยรวมการปิดใช้งานเป็นlocally-disabled อันดับแรกตามตัวอย่างด้านบน


20
แต่การติดตั้ง# pylint: disable=fooinlyne ทำให้ฉันเข้าแถวนานเกินไปดังนั้นตอนนี้ฉันต้องเพิ่ม, line-too-long! ลิ้นในแก้ม; นี่คือสิ่งที่ฉันต้องการและแก้ไขปัญหาของฉัน ขอบคุณ!
dwanderson

รายการที่มีสตริงที่จะใช้จริง: gist.github.com/m451/965bb613177dd4fa896b815aa0e0e365
masi

81

หากต้องการปิดใช้งานคำเตือนในบล็อกให้เพิ่ม

# pylint: disable=C0321

ไปยังบล็อกนั้น


5
นี่เป็นเทคนิคดั้งเดิมและไม่แนะนำอีกต่อไป ดูคำตอบอื่น ๆ
คิวเมนตัส

1
คุณหมายถึงควรใช้ชื่อสัญลักษณ์แทนหมายเลขรหัสใช่หรือไม่
Thakis

5
ใช่. คำตอบโดย imolitครอบคลุมตรงนี้
คิวเมนตัส

2
จะพบชื่อสัญลักษณ์ได้อย่างไร บรรณาธิการของฉันจะถ่มน้ำลาย[pylint] C0111: Missing method docstringดังนั้นการค้นหาหมายเลขรหัสนั้นง่าย แต่การค้นหาชื่อสัญลักษณ์หมายความว่าฉันต้องค้นหามัน
Adam Parkin

@AdamParkin ฉันพบข้อความของฉันที่นี่: pylint-messages.wikidot.com/all-messages
Jean-Francois T.

80

มีหลายวิธีในการปิดการใช้งานคำเตือน & ข้อผิดพลาดจาก Pylint สิ่งที่จะใช้เกี่ยวกับวิธีการที่คุณต้องการใช้การปิดใช้งานทั่วโลกหรือในประเทศ - การตัดสินใจการออกแบบที่สำคัญ

หลายวิธี

  1. ในหนึ่งpylintrcไฟล์ขึ้นไป

สิ่งนี้เกี่ยวข้องกับมากกว่า~/.pylintrcไฟล์ (ในไดเรกทอรี $ HOME ของคุณ) ตามที่อธิบายโดย Chris Morgan ไพลินจะค้นหาไฟล์ rc โดยมีลำดับความสำคัญที่ให้ค่าไฟล์ "ใกล้เคียง" มากกว่า:

  • pylintrcแฟ้มในไดเรกทอรีการทำงานปัจจุบัน; หรือ

  • หากไดเรกทอรีการทำงานปัจจุบันอยู่ในโมดูล Python (เช่นมี__init__.pyไฟล์) ให้ค้นหาลำดับชั้นของโมดูล Python จนกว่าpylintrcจะพบไฟล์ หรือ

  • ไฟล์ที่ตั้งชื่อโดยตัวแปรสภาพแวดล้อม PYLINTRC; หรือ

  • หากคุณมีโฮมไดเร็กตอรี่ที่ไม่ใช่/root:

    • ~/.pylintrc; หรือ

    • ~/.config/pylintrc; หรือ

    • /etc/pylintrc

โปรดทราบว่าไฟล์เหล่านี้ส่วนใหญ่จะตั้งชื่อpylintrc- เฉพาะไฟล์ที่~มีจุดนำ

ในpylintrcไฟล์ของคุณเพิ่มบรรทัดเพื่อปิดใช้งานข้อความ pylint เฉพาะ ตัวอย่างเช่น:

[MESSAGES CONTROL]
disable=locally-disabled
  1. ปิดใช้งานเพิ่มเติมจากpylintบรรทัดคำสั่งตามที่อธิบายโดย Aboo และ Cairnarvon pylint --disable=bad-builtinลักษณะเช่นนี้ ทำซ้ำ--disableเพื่อระงับรายการเพิ่มเติม

  2. ปิดการใช้งานเพิ่มเติมจากบรรทัดรหัส Python แต่ละบรรทัดตามที่อธิบายโดย Imolit ดูเหมือนว่าเหล่านี้some statement # pylint: disable=broad-except(ความคิดเห็นพิเศษที่ส่วนท้ายของบรรทัดต้นฉบับ) และใช้เฉพาะกับบรรทัดปัจจุบันเท่านั้น วิธีการของฉันคือการวางสิ่งเหล่านี้ไว้ที่ส่วนท้ายของบรรทัดรหัสอื่น ๆ เพื่อให้พวกเขาไม่สับสนกับรูปแบบบล็อกดูด้านล่าง

  3. ปิดใช้งานเพิ่มเติมที่กำหนดไว้สำหรับบล็อก Python ขนาดใหญ่ขึ้นจนถึงไฟล์ต้นฉบับที่สมบูรณ์

    • ดูเหมือนว่าเหล่านี้# pragma pylint: disable=bad-whitespace(หมายเหตุpragmaคำสำคัญ)

    • สิ่งเหล่านี้ใช้กับทุกบรรทัดหลัง pragma การวางบล็อกเหล่านี้ไว้ที่ด้านบนของไฟล์จะทำให้การระงับใช้กับไฟล์ทั้งหมด การวางบล็อกเดียวกันที่ต่ำกว่าลงในไฟล์จะทำให้มีผลกับบรรทัดที่ตามบล็อกเท่านั้น แนวทางของฉันคือการวางสิ่งเหล่านี้ไว้ในแนวของตัวเองเสมอเพื่อให้พวกเขาไม่สับสนกับสไตล์บรรทัดเดียวดูด้านบน

    • เมื่อการปราบปรามควรใช้ภายในช่วงของรหัสใช้# pragma pylint: enable=bad-whitespace(ตอนนี้ใช้enableไม่ได้disable) เพื่อหยุดการปราบปราม

โปรดทราบว่าการปิดใช้งานสำหรับบรรทัดเดียวใช้# pylintไวยากรณ์ขณะที่ปิดใช้งานสำหรับบรรทัดนี้เป็นต้นไปใช้# pragma pylintไวยากรณ์ ง่ายต่อการสับสนโดยเฉพาะเมื่อคัดลอกและวาง

วางมันทั้งหมดเข้าด้วยกัน

ฉันมักจะใช้วิธีการเหล่านี้ผสมผสานกัน

  • ฉันใช้~/.pylintrcมาตรฐานระดับโลกอย่างยิ่ง - มีน้อยมาก

  • ฉันใช้ระดับโครงการในระดับpylintrcต่าง ๆ ภายในโมดูล Python เมื่อมีมาตรฐานเฉพาะโครงการ โดยเฉพาะอย่างยิ่งเมื่อคุณรับรหัสจากบุคคลหรือทีมอื่นคุณอาจพบว่าพวกเขาใช้การประชุมที่คุณไม่ต้องการ แต่คุณไม่ต้องการทำงานซ้ำรหัส การตั้งค่าในระดับนี้จะช่วยให้ไม่กระจายการปฏิบัติเหล่านั้นไปยังโครงการอื่น ๆ

  • ฉันใช้ pragmas สไตล์บล็อกที่ด้านบนของไฟล์ต้นฉบับเดียว ฉันชอบที่จะปิด pragmas (หยุดระงับข้อความ) ในช่วงที่มีการพัฒนาแม้สำหรับมาตรฐาน Pylint ฉันไม่เห็นด้วย (เช่น "วิธีการสาธารณะน้อยเกินไป" - ฉันมักจะได้รับคำเตือนในคลาสข้อยกเว้นที่กำหนดเอง) - แต่ การดูข้อความ Pylint เพิ่มเติม / อาจเป็นประโยชน์ในขณะที่คุณกำลังพัฒนา ด้วยวิธีนี้คุณจะสามารถค้นหาเคสที่คุณต้องการระบุด้วย pragmas แบบบรรทัดเดียว (ดูด้านล่าง) หรือเพียงแค่เพิ่มความคิดเห็นสำหรับผู้พัฒนารายต่อไปเพื่ออธิบายว่าทำไมคำเตือนนั้นจึงใช้ได้ในกรณีนี้

  • ฉันเปิดใช้งาน pragmas แบบบล็อกบางส่วนแม้เมื่อรหัสพร้อมที่จะเช็คอินฉันพยายามที่จะใช้งานจำนวนเล็กน้อย แต่เมื่อใช้งานได้เหมาะสมกับโมดูล อย่างไรก็ตามฉันพยายามทิ้งให้น้อยที่สุดเท่าที่จะทำได้

  • ฉันใช้สไตล์ความคิดเห็นบรรทัดเดียวเพื่อแก้ไขข้อผิดพลาดที่อาจเกิดขึ้นโดยเฉพาะ ตัวอย่างเช่นหากมีสถานที่ที่เหมาะสมที่จะทำexcept Exception as excจริงฉันใส่# pylint: disable=broad-exceptบรรทัดนั้นแทนแนวทางที่เป็นสากลมากขึ้นเพราะนี่เป็นข้อยกเว้นที่แปลกและจำเป็นต้องเรียกใช้โดยทั่วไปเป็นรูปแบบของเอกสาร


เช่นเดียวกับทุกอย่างใน Python คุณสามารถกระทำในระดับการอ้อมต่าง ๆ คำแนะนำของฉันคือคิดถึงสิ่งที่อยู่ในระดับใดดังนั้นคุณจึงไม่ต้องใช้ Pylint ที่อ่อนโยนเกินไป


1
คำตอบที่ดีที่สุดคล้ายกับstackoverflow.com/questions/16266452/…
Christophe Roussy

1
ส่วนใหญ่ฉันไม่สามารถสนับสนุนการใช้ข้อยกเว้นทั่วโลก~/.pylintrcได้ IMHO การกำหนดค่าโดยทั่วไปควรเชื่อมโยงกับโครงการและดังนั้นจึงต้องอยู่ภายในโครงการ จากนั้นจะสามารถควบคุมเวอร์ชันและแบ่งปันกับโครงการได้ ความล้มเหลวนี้โคลนอาจไม่มีการปรับแต่งที่จำเป็นสำหรับ pylint เพื่อออกโดยไม่พิมพ์ข้อความ
คิวเมนตัส

@ABB ฉันคิดว่ามันฉลาด
Chris Johnson

3
@ChrisJohnson คำนำหน้าpragma ดูเหมือนไม่จำเป็นทั้งหมด ตัวอย่างเช่นฉันมี# pylint: disable=missing-docstringด้านบนของไฟล์ของฉันและมันใช้กับส่วนที่เหลือทั้งหมดของไฟล์ โปรดตรวจสอบและลบpragmaคำนำหน้าจากคำตอบของคุณ
คิวเมนตัส

Pylint FAQ ไม่ได้เขียนเกี่ยวกับ pragma ใด ๆ ( pylint.pycqa.org/en/latest/… ): คุณสามารถปิดการใช้งานหรือเปิดใช้งาน (ปิดการใช้งานทั่วโลก) ข้อความที่ระดับโมดูลโดยการเพิ่มตัวเลือกที่เกี่ยวข้องในความคิดเห็นที่ด้านบนของไฟล์: # pylint: disable = wildcard- นำเข้า, วิธีซ่อน # pylint: เปิดใช้งาน = มากเกินไปหลายบรรทัด
Yaroslav Nikitenko

18

คุณยังสามารถใช้คำสั่งต่อไปนี้:

pylint --disable=C0321  test.py

รุ่นไพลินของฉันคือ 0.25.1


นี่เป็นเทคนิคแบบดั้งเดิม แนะนำให้ใช้ชื่อสัญลักษณ์ของคำเตือนที่ปิดใช้งานแทน ดูคำตอบนี้
คิวเมนตัส

สิ่งนี้ดูเหมือนจะไม่ทำงานกับ--py3kธงเช่นกัน :(
DylanYoung

ที่น่าสนใจพอจะทำงานได้ดีถ้าให้มาด้วยในrcไฟล์และ (เพิ่มเติมหนักใจ) ก็จริงที่ถูกต้องสร้างไฟล์ที่มีrc --generate-rcfileต้องรหัสรักกับหลายสาขาที่ทำสิ่งเดียวกัน :(
DylanYoung

18

นี่คือคำถามที่พบบ่อย :

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ใน terminal) สำหรับรายการ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

ในกรณีนี้จะช่วยให้ใครบางคนถ้าคุณใช้รหัส Visual Studio มันคาดว่าไฟล์ที่จะอยู่ในการเข้ารหัส UTF8 เพื่อสร้างไฟล์ฉันวิ่งpylint --generate-rcfile | out-file -encoding utf8 .pylintrcใน PowerShell


0

ตามเอกสารpylintที่ง่ายที่สุดคือการใช้แผนภูมินี้:

  • การตรวจสอบที่เกี่ยวข้องกับการประชุม C
  • R การตรวจสอบซ้ำที่เกี่ยวข้อง
  • คำเตือนต่างๆ W
  • ข้อผิดพลาด E สำหรับข้อบกพร่องที่น่าจะเป็นในรหัส
  • F ร้ายแรงหากมีข้อผิดพลาดเกิดขึ้นซึ่งทำให้ pylint ไม่สามารถทำการประมวลผลเพิ่มเติมได้

ดังนั้นหนึ่งสามารถใช้:

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

-1

Python ไวยากรณ์อนุญาตให้มีมากกว่าหนึ่งคำสั่งในบรรทัดคั่นด้วยเครื่องหมายอัฒภาค (;) อย่างไรก็ตามการ จำกัด แต่ละบรรทัดให้มีหนึ่งคำสั่งทำให้มนุษย์สามารถทำตามตรรกะของโปรแกรมได้ง่ายขึ้นเมื่ออ่านผ่าน

อีกวิธีหนึ่งในการแก้ไขปัญหานี้คือการเข้าใจว่าเหตุใดข้อความผ้าสำลีจึงอยู่ที่นั่นและไม่ใส่คำสั่งมากกว่าหนึ่งประโยคในหนึ่งบรรทัด

ใช่คุณอาจพบว่ามันง่ายกว่าที่จะเขียนหลาย ๆ คำสั่งต่อบรรทัดอย่างไรก็ตาม pylint นั้นมีไว้สำหรับผู้อ่านคนอื่น ๆ ของโค้ดของคุณไม่ใช่แค่คุณ


-1

คุณอาจต้องการลองนี้:

แก้ไข "C: \ Users \ ชื่อผู้ใช้ของคุณ \ 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"
    ],
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.