PyLint抱怨,但是它违反了PEP8吗?

时间:2013-11-20 15:20:23

标签: python pep8

我的代码中有这一部分:

 class CSVFile():                                                                

     # Keys in kwargs that are not allowed                                       
     __black_list = ()                                                           

     def __init__(self, **kwargs):                                               
         for (k, v) in kwargs.iteritems():                                       
             if k in self.__class__.__black_list:                                
                 LOG.error("%s is not allowed ", k)                              
             setattr(self, k, v) 

正如您所看到的,我将key=>value对分配为实例变量。稍后在代码中我使用了我在这里设置的变量(例如self.dest)。

当我用pylint检查时,它会抱怨:

E: 54,32:CSVFile.upload_file_to_s3: Instance of 'CSVFile' has no 'dest' member

显然,如果我在self.dest方法中定义__init__,那么这个错误就会消失。

所以问题是:从PEP8的角度来看,这段代码看起来是“糟糕的”吗?

2 个答案:

答案 0 :(得分:4)

与您的代码相关,我看到的唯一潜在违规行为是**kwargs格式化您的键值。 只要** kwargs元素跟随PEP 8 variable naming conventions(all_lowercase_words_separted_by_underscores)就可以了。

PyLint向你抱怨的原因是它不能告诉CSVFile对象将具有dest属性(或者因为它们是动态附加的任何其他属性)。

总体问题是PyLint会进行PEP8检查,但它也会做其他事情。此消息是“其他内容”的一部分。

干杯。

答案 1 :(得分:3)

你在做什么并没有错。

请记住,pylint是一种工具(也是一种很棒的工具),但肯定不是目标。

您应该继续使用pylint,但有时它会变得很麻烦,您可以自定义要运行的检查。在这种情况下,您要禁用该特定检查。

查看this question的答案,其中解释了如何自定义它。