我想获得一些关于这些工具的反馈:
我试图禁用警告C0321("在单行上多个语句" - 我经常if在同一行上放置短单行结果的语句),在Pylint 0.21.1中(如果重要的话:到0.20. 1,常见的0.50.3,Python 2.6.6(r266:84292,2010年9月15日,16:22:56)).
我已经尝试添加disable=C0321Pylint配置文件,但Pylint仍坚持报告它.该行的变化(如disable=0321或disable=C321)被标记为错误,因此Pylint 确实正确识别该选项,它只是忽略它.
这是一个Pylint错误,还是我做错了什么?有没有办法解决?我真的想摆脱一些噪音.
考虑此代码段:
from os import walk
files = []
for (dirpath, _, filenames) in walk(mydir):
# more code that modifies files
if len(files) == 0: # <-- C1801
return None
Run Code Online (Sandbox Code Playgroud)
Pylint对这条关于if语句行的消息感到震惊:
[pylint] C1801:不要
len(SEQUENCE)用作条件值
乍一看,规则C1801对我来说听起来不太合理,参考指南中的定义并不能解释为什么这是一个问题.事实上,它完全称之为不正确的用法.
len-as-condition(C1801): 不要
len(SEQUENCE)用作条件值当Pylint在条件内检测到len(序列)的错误使用时使用.
我的搜索尝试也未能为我提供更深入的解释.我确实理解序列的长度属性可能会被懒惰地评估,并且__len__可以被编程为具有副作用,但是对于Pylint是否足以使这样的使用不正确而言,这是否有问题是值得怀疑的.因此,在我简单地配置我的项目以忽略规则之前,我想知道我的推理是否缺少某些内容.
什么时候使用len(SEQ)条件值有问题?Pylint试图用C1801避免哪些主要情况?
我正在Python项目上运行PyLint.PyLint对无法找到numpy成员提出了许多抱怨.如何在避免跳过成员资格检查的同时避免这种情况.
从代码:
import numpy as np
print np.zeros([1, 4])
Run Code Online (Sandbox Code Playgroud)
哪,跑了,我得到了预期的:
[[0. 0. 0. 0.]]
但是,pylint给了我这个错误:
E:3,6:模块'numpy'没有'零'成员(无成员)
对于版本,我使用pylint 1.0.0(astroid 1.0.1,常见的0.60.0)并尝试使用numpy 1.8.0.
我非常希望将pylint集成到我的python项目的构建过程中,但是我遇到了一个show-stopper:我觉得非常有用的一种错误类型 - : - E1101: *%s %r has no %r
member*在使用常见的django字段时会报告错误, 例如:
E1101:125:get_user_tags: Class 'Tag' has no 'objects' member
Run Code Online (Sandbox Code Playgroud)
这是由这段代码引起的:
def get_user_tags(username):
"""
Gets all the tags that username has used.
Returns a query set.
"""
return Tag.objects.filter( ## This line triggers the error.
tagownership__users__username__exact=username).distinct()
# Here is the Tag class, models.Model is provided by Django:
class Tag(models.Model):
"""
Model for user-defined strings that help categorize Events on
on a per-user basis.
"""
name = models.CharField(max_length=500, null=False, …Run Code Online (Sandbox Code Playgroud) 我通过让它调用多个函数来拆分我的类构造函数,如下所示:
class Wizard:
def __init__(self, argv):
self.parse_arguments(argv)
self.wave_wand() # declaration omitted
def parse_arguments(self, argv):
if self.has_correct_argument_count(argv):
self.name = argv[0]
self.magic_ability = argv[1]
else:
raise InvalidArgumentsException() # declaration omitted
# ... irrelevant functions omitted
Run Code Online (Sandbox Code Playgroud)
当我的口译员愉快地运行我的代码时,Pylint抱怨:
Instance attribute attribute_name defined outside __init__
粗略的Google搜索目前毫无结果.保持所有构造函数逻辑__init__似乎没有组织,并且关闭Pylint警告似乎也是黑客攻击.
什么是/ Pythonic解决这个问题的方法?
我正在Windows上的Wing IDE中运行PyLint.我的项目中有一个子目录(包),在包中我从顶层导入一个模块,即.
__init__.py
myapp.py
one.py
subdir\
__init__.py
two.py
Run Code Online (Sandbox Code Playgroud)
在two.py我内部import one,这在运行时工作正常,因为顶级目录(从中myapp.py运行)位于Python路径中.但是,当我在two.py上运行PyLint时,它给出了一个错误:
F0401: Unable to import 'one'
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
对于以下代码:
logger.debug('message: {}'.format('test'))
Run Code Online (Sandbox Code Playgroud)
pylint 产生以下警告:
记录格式插值(W1202):
在日志记录函数中使用%格式并将%参数作为参数传递当日志语句的调用形式为"logging.(format_string.format(format_args ...))"时使用.此类调用应使用%格式,但通过将参数作为参数传递,将插值留给日志记录功能.
我知道我可以关掉这个警告,但我喜欢理解它.我假设使用format()是打印输出语句的首选方法pylint.为什么记录器语句不适用?
我的标题中有以下行:
import config.logging_settings
Run Code Online (Sandbox Code Playgroud)
这实际上改变了我的python日志设置,但是pylint认为它是一个未使用的导入.我不想删除unused-import一般警告,所以可以忽略这一条特定的行吗?
我不介意有一个.pylintrc这个项目,所以将接受更改配置文件的答案.
否则,这样的事情也将受到赞赏:
import config.logging_settings # pylint: disable-this-line-in-some-way
Run Code Online (Sandbox Code Playgroud) 我正在运行linux.我可以执行类似的操作pylint --generate-rcfile > .pylintrc,然后对生成的.pylintrc文件进行更改以覆盖默认设置吗?如果是这样,它应该在我的~/目录中,还是应该放在.pylint.d中?
pylint ×10
python ×9
conditional ×1
constructor ×1
django ×1
numpy ×1
pep8 ×1
pychecker ×1
pyflakes ×1
python-3.x ×1
pythonpath ×1
virtualenv ×1