Pylint ปิดการใช้งานคำเตือนทั้งหมดสำหรับไฟล์


90

เรากำลังใช้ไพลินท์ภายในระบบสร้างของเรา เรามีแพคเกจ python ภายในฐานรหัสของเราที่มีรหัสทิ้งและฉันต้องการปิดการใช้งานคำเตือนทั้งหมดสำหรับโมดูลชั่วคราวเพื่อที่ฉันจะได้หยุดบั๊ก devs อื่น ๆ ด้วยข้อความที่ไม่จำเป็นเหล่านี้ มีวิธีง่ายๆในการpylint: disableเตือนทั้งหมดสำหรับโมดูลหรือไม่?

คำตอบ:


127

จากคำถามที่พบบ่อยของ PyLint

ด้วย Pylint <0.25 ให้เพิ่ม

# pylint: disable-all

ที่จุดเริ่มต้นของโมดูล

Pylint 0.26.1 ขึ้นไปได้เปลี่ยนชื่อคำสั่งนั้นเป็น

# pylint: skip-file

(แต่เวอร์ชันแรกจะถูกเก็บไว้เพื่อความเข้ากันได้แบบย้อนหลัง)

เพื่อให้ง่ายต่อการค้นหาว่าโมดูลใดถูกละเว้นข้อความระดับข้อมูล I0013 จะถูกปล่อยออกมา ด้วย Pylint เวอร์ชันล่าสุดหากคุณใช้ไวยากรณ์เก่าข้อความ I0014 เพิ่มเติมจะถูกปล่อยออกมา


2
หมายเหตุ: นี้จะปิดการใช้งานคำเตือนและข้อผิดพลาดทั้งหมด หากคุณกำลังมองหาวิธีปิดใช้งานเฉพาะคำเตือนโปรดดูคำตอบของฉันในหน้านี้
eatcrayons

32

PyLint มี"หมวดหมู่" ห้าหมวดหมู่สำหรับข้อความ (ซึ่งฉันทราบดี)

หมวดหมู่เหล่านี้ชัดเจนมากในอดีต แต่ข้อความ Pylint ที่มีหมายเลขถูกแทนที่ด้วยชื่อ ยกตัวอย่างเช่นอยู่ในขณะนี้C0302 too-many-linesแต่ตัว 'C' บอกเราว่านั่นtoo-many-linesคือข้อความอนุสัญญา สิ่งนี้ทำให้เกิดความสับสนเนื่องจากข้อความConventionมักแสดงเป็นคำเตือนเนื่องจากระบบหลายระบบ (เช่นSyntastic ) ดูเหมือนจะจัดประเภททุกอย่างเป็นคำเตือนหรือข้อผิดพลาด อย่างไรก็ตามรายงาน PyLint ยังคงแบ่งสิ่งต่างๆออกเป็นหมวดหมู่เหล่านี้ดังนั้นจึงยังได้รับการสนับสนุนอย่างแน่นอน

คำถามของคุณหมายถึงคำเตือนโดยเฉพาะและชื่อข้อความคำเตือน PyLint ทั้งหมดขึ้นต้นด้วย 'W'

มันยากสำหรับฉันในการติดตามเรื่องนี้ แต่ในที่สุดคำตอบนี้ก็นำฉันไปสู่คำตอบ PyLint ยังคงรองรับการปิดใช้งานข้อความทั้งหมวดหมู่ ดังนั้นหากต้องการปิดการใช้งานคำเตือนทั้งหมดคุณต้องทำ:

disable=W

สามารถใช้ที่บรรทัดคำสั่ง:

$ pylint --disable=W myfile.py

หรือคุณสามารถวางไว้ในไฟล์ pylintrc ของคุณ:

[MESSAGES CONTROL]
disable=W

หมายเหตุ: คุณอาจมีdisableตัวเลือกในไฟล์ rc ของคุณอยู่แล้วซึ่งในกรณีนี้คุณควรต่อท้าย 'W' ในรายการนี้

หรือคุณสามารถวางไว้ในบรรทัดในโค้ดของคุณซึ่งจะใช้งานได้กับขอบเขตที่วางไว้:

# pylint: disable=W

หากต้องการปิดใช้งานสำหรับทั้งไฟล์ควรวางไว้ที่ด้านบนสุดของไฟล์ อย่างไรก็ตามแม้ที่ด้านบนสุดของไฟล์ฉันพบว่าฉันยังคงได้รับtrailing-newlinesข้อความเตือนอยู่ (ในทางเทคนิคเป็นคำเตือนตามแบบแผนแต่ฉันกำลังไปถึงจุดนั้น)

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

วิธีการแก้ปัญหาของฉันคือการปิดการใช้งานทุกคำเตือน , การประชุมและRefactoringข้อความสำหรับแฟ้มนี้เพียงคนเดียวโดยการวางคำสั่งดังต่อไปนี้ PyLint ในบรรทัดแรก:

# pylint: disable=W,C,R

นอกเหนือจากข้อความข้างต้นสำหรับการขึ้นบรรทัดใหม่แล้วสิ่งนี้ยังทำในสิ่งที่ฉันต้องการ


17

ได้คุณสามารถระบุ# pylint: skip-fileในไฟล์ได้ แต่การปิดใช้งานคำเตือนทั้งหมดสำหรับไฟล์นั้นเป็นวิธีปฏิบัติที่ไม่ดี

หากคุณต้องการที่เฉพาะเจาะจงคำเตือนปิดการใช้งานเพียงนี้สามารถทำได้โดยการเพิ่มความคิดเห็นเช่นการปิดการใช้ข้อความที่ระบุสำหรับที่เหลือของไฟล์หรืออย่างน้อยก็จนกว่า# pylint: disable=message-name# pylint: enable=message-name

ตัวอย่าง:

# pylint: disable=no-member
class C123:
    def __init__(self):
        self.foo_x = self.bar_x
# pylint: enable=no-member

class C456:
    def __init__(self):
        self.foo_x = self.bar_x

เพื่อหลีกเลี่ยงไม่ให้มีการแจ้งเตือนว่าคำเตือนเฉพาะถูกปิดใช้งานเช่นนี้disable=locally-disabledสามารถเพิ่มลงใน pylintrc ได้
ColonelFazackerley

7

อีกทางเลือกหนึ่งคือใช้--ignoreตัวเลือกบรรทัดคำสั่งเพื่อข้ามการวิเคราะห์สำหรับไฟล์บางไฟล์


0

กรณีการใช้งานของฉันคือการเรียกใช้pylint *.pyเพื่อประมวลผลไฟล์ทั้งหมดในไดเร็กทอรียกเว้นว่าฉันต้องการข้ามไฟล์ใดไฟล์หนึ่ง

เพิ่ม#pylint: skip-fileที่เกิด pylint I: 8, 0: Ignoring entire file (file-ignored)ที่จะล้มเหลวด้วย การเพิ่ม#pylint: disable=file-ignoredไม่สามารถแก้ไขได้ สันนิษฐานว่าเป็นข้อผิดพลาดทั่วโลกแทนที่จะเป็นข้อผิดพลาดเฉพาะไฟล์

วิธีแก้ปัญหาคือการรวม--disable=file-ignoredไว้ในตัวเลือกคำสั่ง pylint ใช้เวลานานเกินไปในการคิดออก ไม่ควรมีfile-ignoredข้อผิดพลาดเมื่อคุณเพิกเฉยต่อไฟล์อย่างชัดเจน


1
ยิ่งไปกว่านั้นคือวางไว้ในpylintrcไฟล์ config ไม่ใช่ในตัวเลือกคำสั่ง
Acumenus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.