是否有任何好的模块可以针对您的代码运行以捕获编码错误?我希望pylint能够在使用默认参数时捕获错误,如下所示:
>>> def spam(eggs=[]):
... eggs.append("spam")
... return eggs
Run Code Online (Sandbox Code Playgroud)
但却发现他们没有报告,感到很失望.我正在寻找PEP8格式以外的东西.
我为Pylint设置了一个自定义配置文件(名称,方便,配置).必须有一种方法,我不必包括--rcfile=config在每次运行.如何永久设置配置文件?
考虑以下课程:
class MyObject(object):
__slots__ = ('_att1', '_att2')
def __init__(self):
self._att1 = None
self._att2 = None
@property
def att1(self):
"""READ-ONLY property. """
return self._att1
@property
def att2(self):
"""att2 property description. """
return self._att2
@att2.setter
def att2(self, val):
self._att2 = val
Run Code Online (Sandbox Code Playgroud)
使用属性装饰器的一个优点是我们可以添加一些文档
a = MyObject()
help(a)
Help on MyObject in module __main__ object:
class MyObject(__builtin__.object)
| Methods defined here:
|
| __init__(self)
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| att1
| READ-ONLY property.
|
| att2
| att2 property …Run Code Online (Sandbox Code Playgroud) 今天我遇到了以下的pylint错误:
invalid-all-object(E0604):
__all__中的无效对象%r必须仅包含在__all__中出现无效(非字符串)对象时使用的字符串.
而且我很好奇为什么直接暴露对象被认为是错误的?
我有一个PyLint配置文件.pylintrc,并定义了一些规则.
但是,对于一条规则,我有很多项目会产生很长的路线.
[TYPECHECK]
generated-members = XXX, YYY, ZZZ......
Run Code Online (Sandbox Code Playgroud)
在github上可以看到一条长行的例子:https: //github.com/behave/behave.example/blob/master/pylintrc#L263
是否有可能打破这一行以保持列表项在下一行?我试图将项目移动到下一行,但是,这似乎使文件无效.
我正在使用为python 3+配置的pylint处理此代码:
import utils
valid_commands = ['category', 'help', 'exit']
def createCategory():
utils.clear()
category = {
name: 'test' <- allegedly undefined
}
utils.insertCategory(category)
def listActions():
utils.clear()
for command in valid_commands:
print(command)
def exit():
utils.clear()
actions = {
'category': createCategory,
'help': listActions,
'exit': exit
}
command = ''
while command != 'exit':
command = input('task_tracker> ')
if command in valid_commands:
actions[command]()
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
我的代码运行正常,但这个错误不会消失的事实让我疯狂.为什么它告诉我这是未定义的?
我有这样的结构:
|- file run_app.py
|- folder 'tasks'
|-- file app.py
Run Code Online (Sandbox Code Playgroud)
中有一个字符串run_app.py:
import tasks.app
Run Code Online (Sandbox Code Playgroud)
并且 pylint 警告说
run_app.py:8:0: E0611: No name 'app' in module 'tasks' (no-name-in-module)
Run Code Online (Sandbox Code Playgroud)
当我重命名tasks为 时taskss,错误消失。这是什么?如果我想将文件夹完全命名为“任务”,如何解决这种奇怪的行为?
在 Django 代码上使用 Pylint,我经常收到 W0613 警告。90% 的情况是相关的,当变量被声明而不使用时。但有时我认为并非如此。
W0613: Unused argument 'kwargs' (unused-argument)
触发警告的示例,处理 500 错误的视图:
def error_500(request, *args, **kwargs):
'''
A 500 error handling view
'''
data = {}
return render(request, '500.html', data)
Run Code Online (Sandbox Code Playgroud)
在上述情况下,如果我们删除 **kwargs,从 Django 2 开始(我记得),任何 500 错误情况都会导致未处理的异常变成崩溃。
所以我很困惑 Pylint 是否真的了解所有可能出现的情况。
我应该总是将警告视为真正的警告,因为我的代码缺少某些东西,还是应该知道这些特殊情况并消除警告?
我注意到通过为 Django 使用特殊的 Pylint,这种类型的警告通常不会经常出现(pylint-django)。
但它有时仍然会发生。
我正在尝试从 Gitlab CI 脚本中的 PyLint 输出生成徽章。最终,如果 PyLint 具有非零退出代码,作业应该会失败。但在此之前,我希望创建徽章。所以我尝试了以下方法:
before_script:
- [...]
- mkdir -p public
script:
- pylint lib --disable R,missing-docstring,wrong-import-order --reports=y | tee public/pylint-report.txt
- export SUCCESS=${PIPESTATUS[0]}
- SCORE=$(tail -n 2 public/pylint-report.txt | grep -o -P "\d\d?\.\d+\/\d*" | head -1)
- echo "PyLint score ${SCORE}"
- python3.6 -m pybadges --left-text=PyLint --right-text=${SCORE} > public/pylint.svg
- exit ${SUCCESS}
artifacts:
when: always
[...]
Run Code Online (Sandbox Code Playgroud)
如果 PyLint 退出代码为 0,这可以正常工作:
$ mkdir -p public
$ pylint lib --disable R,missing-docstring,wrong-import-order --reports=y | tee public/pylint-report.txt; export SUCCESS=${PIPESTATUS[0]} …Run Code Online (Sandbox Code Playgroud) 这是一个小烦恼,但是 pywin32 模块被 VSCode 中的 python linter 报告为未解析的导入。
我已经安装了 pywin32,并且可以在终端会话中以及脚本运行时导入模块。
我的 python.pythonPath 在我的 settings.json 中设置正确。
linter 似乎无法找到模块。
但是,如果我使用以下语法,linter 可以工作,但在运行时导入显然会失败。
import win32.lib.win32event
Run Code Online (Sandbox Code Playgroud)
关于如何“制作”VSCode 或 linter 匹配正确导入的任何想法?
pylint ×10
python ×8
bash ×1
django ×1
gitlab-ci ×1
lint ×1
macos ×1
pylintrc ×1
python-3.6 ×1
python-3.x ×1