2015-10-11 23 views
14

Pylint than phiền về Invalid constant name "myprint" (invalid-name) trong trường hợp viết tắt của hàm logger.Thông báo Pylint: Tên không đổi không hợp lệ (tên không hợp lệ)

# import 
from utils import get_logger 
LOGFILE = '6_evaluator.log' 
myprint = get_logger(LOGFILE) 

def main(): 
    # some stuff 
    myprint('log log') 

if __name__ == '__main__': 
    main() 

Điều này có thể được thực hiện mà không cần chỉnh cấu hình pylint không?

Nếu cần thiết, đây là định nghĩa của get_logger:

import logging 
import os 

def get_logger(logfile): 
    """ Return a logger that log on stdout and in LOGFILE""" 
    if os.path.isfile('{}'.format(logfile)): 
     os.remove('{}'.format(logfile)) 

    logging.basicConfig(filename='{}'.format(logfile), level=logging.INFO) 
    logger = logging.getLogger('') 
    logger.addHandler(logging.StreamHandler()) 
    myprint = logger.info 

    myprint('log file at: {}'.format(logfile)) 
    myprint('Again Hello from logger') 
    return myprint 
+0

Bạn có thể chia sẻ tệp nhật ký mẫu không? Tôi muốn làm một bài kiểm tra. – mertyildiran

+0

Câu hỏi và câu trả lời tương tự: https://stackoverflow.com/questions/10815549/pylint-showing-invalid-variable-name-in-output –

Trả lời

13

Di chuyển định nghĩa myprint sang main() là một cách để chặn thông báo.

Mỗi Pylint docs for invalid-name (C0103), có vẻ như tên của hằng số phải có hiệu quả là chữ hoa. Như vậy, tên MYPRINT sẽ không tạo thông báo.

Nếu bạn gắn thêm nhận xét như dưới đây vào dòng, thông báo sẽ không được tạo.

log = get_logger() # pylint: disable=locally-disabled, invalid-name 

Hoặc, thêm phần sau vào .pylintrc cho dự án của bạn. Đây là giải pháp ưa thích của tôi.

[BASIC] 
good-names=log 

Nếu bạn muốn có một mô hình toàn bộ các tên không hợp lệ (và không chỉ là một tên duy nhất) có giá trị, bạn có thể tùy chỉnh khác const-rgx, vv trong các phần tương tự. Tham khảo trang pylint được liên kết trước đó.

Cuối cùng, nếu ứng dụng của bạn nhỏ và độc lập, bạn chỉ có thể định cấu hình và sử dụng trình ghi nhật ký thay vì chẳng hạn như logging.warn('test').

2

Vấn đề là bạn đang định myprint ở cấp mô-đun.

Nếu bạn xác định nó trong chính bạn sẽ không nhận được lỗi này từ pylint.

Các vấn đề liên quan