Pylint vô hiệu hóa tất cả các cảnh báo cho một tệp


85

Chúng tôi đang sử dụng pylint trong hệ thống xây dựng của chúng tôi. Chúng tôi có một gói python trong cơ sở mã của chúng tôi có mã nguồn và tôi muốn tạm thời vô hiệu hóa tất cả cảnh báo cho một mô-đun để tôi có thể ngừng làm phiền các nhà phát triển khác bằng những thông báo thừa này. Có cách nào dễ dàng cho pylint: disabletất cả các cảnh báo cho một mô-đun không?

Câu trả lời:


120

Từ Câu hỏi thường gặp về PyLint

Với Pylint <0,25, thêm

# pylint: disable-all

ở đầu mô-đun.

Pylint 0.26.1 trở lên đã đổi tên chỉ thị đó thành

# pylint: skip-file

(nhưng phiên bản đầu tiên sẽ được giữ lại để tương thích ngược).

Để dễ dàng tìm thấy mô-đun nào bị bỏ qua, một thông báo mức thông tin I0013 được gửi. Với các phiên bản gần đây của Pylint, nếu bạn sử dụng cú pháp cũ, một thông báo I0014 bổ sung sẽ được gửi.


2
Lưu ý: điều này sẽ vô hiệu hóa tất cả các cảnh báo và tất cả các lỗi . Nếu bạn đang tìm cách vô hiệu hóa chỉ cảnh báo, hãy xem câu trả lời của tôi trên trang này.
eatcrayons

30

PyLint có năm "danh mục" cho tin nhắn (tôi biết).

Những danh mục này rất rõ ràng trong quá khứ, nhưng các thông điệp Pylint được đánh số bây giờ đã được thay thế bằng tên. Ví dụ, C0302là bây giờ too-many-lines. Nhưng chữ 'C' cho chúng ta biết rằng đó too-many-lineslà một thông điệp Công ước . Điều này gây nhầm lẫn, vì các thông báo Công ước thường chỉ hiển thị dưới dạng cảnh báo, vì nhiều hệ thống (chẳng hạn như Syntastic ) dường như phân loại mọi thứ là cảnh báo hoặc lỗi. Tuy nhiên, báo cáo PyLint vẫn chia nhỏ mọi thứ thành các danh mục này, vì vậy nó chắc chắn vẫn được hỗ trợ.

Câu hỏi của bạn đặc biệt đề cập đến Cảnh báo và tất cả các tên thông báo Cảnh báo PyLint đều bắt đầu bằng 'W'.

Có một chút khó khăn cho tôi để theo dõi điều này, nhưng câu trả lời này cuối cùng đã dẫn tôi đến câu trả lời. PyLint vẫn hỗ trợ tắt toàn bộ danh mục thư. Vì vậy, để tắt tất cả các Cảnh báo , bạn sẽ làm:

disable=W

Điều này có thể được sử dụng tại dòng lệnh:

$ pylint --disable=W myfile.py

Hoặc, bạn có thể đặt nó vào tệp pylintrc của mình:

[MESSAGES CONTROL]
disable=W

Lưu ý: bạn có thể đã có disabletùy chọn trong tệp rc của mình, trong trường hợp đó, bạn nên thêm 'W' vào danh sách này.

Hoặc, bạn có thể đặt nó nội dòng trong mã của mình, nơi nó sẽ hoạt động cho phạm vi mà nó được đặt:

# pylint: disable=W

Để vô hiệu hóa nó cho toàn bộ tệp, tốt nhất bạn nên đặt nó ở đầu tệp. Tuy nhiên, ngay cả ở phần trên cùng của tệp, tôi thấy rằng tôi vẫn nhận được thông trailing-newlinesbáo cảnh báo (về mặt kỹ thuật là cảnh báo quy ước , nhưng tôi đang nhận được điều đó).

Trong trường hợp của tôi, tôi đã có một thư viện do ai đó viết từ lâu. Nó hoạt động tốt, vì vậy thực sự không cần phải lo lắng về quy ước Python hiện đại, v.v. Tất cả những gì tôi thực sự quan tâm là các lỗi có thể làm hỏng mã của tôi.

Giải pháp của tôi là vô hiệu hóa tất cả các thông báo Cảnh báo , Quy ướcTái cấu trúc cho một tệp này chỉ bằng cách đặt lệnh PyLint sau trên dòng đầu tiên:

# pylint: disable=W,C,R

Ngoài thông báo đã nói ở trên cho các dòng mới theo sau, điều này đã làm chính xác những gì tôi cần.


14

Có, bạn có thể chỉ định # pylint: skip-file, nhưng việc tắt tất cả các cảnh báo cho một tệp là một cách thực hiện không tốt. Mã ném không được tồn tại trong một nhánh được phân tích bằng pylint.

Nếu bạn chỉ muốn vô hiệu hóa các cảnh báo cụ thể, điều này có thể được thực hiện bằng cách thêm nhận xét, chẳng hạn như # pylint: disable=message-nameđể tắt thông báo được chỉ định cho phần còn lại của tệp hoặc ít nhất là cho đến khi # pylint: enable=message-name.

Thí dụ:

# 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

Để tránh bị thông báo rằng một cảnh báo cụ thể đã bị vô hiệu hóa như thế này, disable=locally-disabledcó thể thêm vào pylintrc.
ColonelFazackerley 21/02/18

@ColonelFazackerley Có, nhưng tại thời điểm đó, việc có một pylintrctệp cho dự án của bạn là rất có ý nghĩa . Một ví dụ là ở đây .
Acumenus

6

Một tùy chọn khác là sử dụng --ignoretùy chọn dòng lệnh để bỏ qua phân tích đối với một số tệp.


0

Trường hợp sử dụng của tôi là chạy pylint *.pyđể xử lý tất cả các tệp trong một thư mục, ngoại trừ việc tôi muốn bỏ qua một tệp cụ thể.

Việc thêm #pylint: skip-filekhiến pylint bị lỗi I: 8, 0: Ignoring entire file (file-ignored). Thêm #pylint: disable=file-ignoredkhông khắc phục được điều đó. Có lẽ, đó là một lỗi chung chứ không phải là một lỗi dành riêng cho tệp.

Giải pháp là đưa --disable=file-ignoredvào các tùy chọn lệnh pylint. Đã mất quá nhiều thời gian để tìm ra điều này; sẽ không file-ignoredxảy ra lỗi khi bạn bỏ qua tệp một cách rõ ràng.


1
Lý tưởng hơn, hãy đặt nó trong một pylintrctệp cấu hình, không phải trong một tùy chọn lệnh.
Acumenus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.