标签: pep8

如何配置PyLint来检查PEP8检查的所有内容?

在PyLint的邮件列表中搜索答案没有带来任何有趣的结果.
众所周知PyLint是可定制的,所以我想这应该是可能的......

我希望PyLint检查是否符合PEP8的原因是因为

  • PyDev 对PyLint的支持比对PEP8的支持要好得多.
  • 让一个工具执行所有检查比使用两个检查更容易.

我也在PyLint的邮件列表上问过这个问题:http: //thread.gmane.org/gmane.comp.python.logilab/1039

来自PEP8的诊断消息示例,我没有从PyLint获得:

  • E203在':'之前的空格
  • E225在运营商周围缺少空白
  • E251关键字/参数周围没有空格等于
  • E301预计1空行,发现0
  • E303空行太多
  • E501线太长(90个字符)
  • W291尾随空格
  • W292在文件末尾没有换行符
  • W293空行包含空格

python coding-style lint pep8 pylint

30
推荐指数
1
解决办法
1万
查看次数

如何在PyCharm中禁用PEP 8的特殊命名约定检查

我安装了PyCharm并启用了pep8检查Inspections.如果我写:

def func(argOne):
    print(argOne)
Run Code Online (Sandbox Code Playgroud)

IDE向我显示此警告: Argument name should be lowercase

没有选择忽略此类检查.
pep8
这里找不到这样的错误号是所有的命名检查.
如何忽略其中一些

我需要这个,因为必须保留当前的项目编码指南.改变整个项目的指导方针太难了.

需要禁用一些命名检查.并非都喜欢"Settings"-> "Editor"-> "Inspections"->"PEP8 coding style violation".
例如,应该用PEP8检查类名,而不是函数参数名.

python jetbrains-ide pep8 pycharm

30
推荐指数
2
解决办法
2万
查看次数

如何修复:W602弃用异常提升形式

如果我使用pylint(通过sublimerlinter),我收到以下警告消息:

W602 deprecated form of raising exception

这个我如何在我的代码中使用异常:

if CONDITION == True:
    raise ValueError, HELPING_EXPLANATION
Run Code Online (Sandbox Code Playgroud)

python pep8 pylint

28
推荐指数
1
解决办法
6411
查看次数

Python类引用的命名约定是什么

在Python中引用类的变量的命名约定是什么?

class MyClass(object):
    pass

# which one is correct?
reference_to_class = MyClass

# or
ReferenceToClass = MyClass
Run Code Online (Sandbox Code Playgroud)

这是另一个类似于我的情况的例子:

# cars.py
class Car(object):
    pass

class Sedan(Car):
    pass

class Coupe(Car):
    pass

class StatonWagon(Car):
    pass

class Van(Car):
    pass

def get_car_class(slug, config):
    return config.get(slug)

# config.py
CONFIG = {
    'ford-mustang': Coupe,
    'buick-riviera': Coupe,
    'chevrolet-caprice': Sedan,
    'chevy-wan' Van:
    'ford-econoline': Van
}

# main.py
from config.py import CONFIG
from cars import get_car_class

MyCarClass = get_car_class('buick-riviera')

my_car = MyCarClass()
Run Code Online (Sandbox Code Playgroud)

我更喜欢ReferenceToClass,每个新来的代码都知道它是一个类,而不是一个实例.但正如@poplitea写的那样,文献参考会很棒.

python pep8 naming-conventions

28
推荐指数
2
解决办法
2万
查看次数

与空列表比较时使用"=="运算符是错误的吗?

当我使用==运算符对空列表进行比较时,PyCharm(4.0.6)会抱怨,但是当我使用is运算符时它不会:

在此输入图像描述

我想这与PEP 8有关,但问题是当我使用is运算符时,正如PyCharm建议的那样,我有一个假阴性.这是iPython shell中的一个简单示例,表明在这种情况下,==运算符似乎更合适,因为is运算符返回错误否定:

In[2]: actions = []
In[3]: actions == []
Out[3]: True
In[4]: actions is []
Out[4]: False
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么PyCharm ==在与空列表进行比较时会抱怨运营商吗?我是否根据PEP 8做错了什么?

python list pep8 pycharm

28
推荐指数
1
解决办法
1927
查看次数

如何修复Pylint"错误的悬挂缩进"和PEP8 E121?

我试图正确缩进下面的代码:

RULES_LIST = [
    ('Name1', 1, 'Long string upto 40 chars'),
    ('Name2', 2, 'Long string upto 40 chars'),
    ('Name3', 3, 'Long string upto 40 chars'),
    ('Name4', 4, 'Long string upto 40 chars'),
    ('Name5', 5, 'Long string upto 40 chars'),
    ('Name6', 6, 'Long string upto 40 chars'),
    ('Name7', 7, 'Long string upto 40 chars'),
    ('Name8', 8, 'Long string upto 40 chars')
]
Run Code Online (Sandbox Code Playgroud)

pylint的抱怨Wrong hanging indentation.对于上面的代码,并PEP8抱怨E121: under-indented for hanging indent.

针对pylint的可能修复方法是将其更改为:

RULES_LIST = [\
    ('Name1', 1, 'Long string …
Run Code Online (Sandbox Code Playgroud)

python pep8 pylint indentation

27
推荐指数
3
解决办法
2万
查看次数

在评论和文档字符串中使用较短的文本宽度

从强大的PEP 8:

[P]租约将所有行限制为最多79个字符.对于流动长文本块(文档字符串或注释),建议将长度限制为72个字符.

在Vim中编辑Python代码时,我将我设置textwidth为79,当我达到字符限制时,Vim会自动为我包装很长的Python代码.但是在评论和文档字符串中,我需要将文本换成72个字符.

textwidth当我在评论或文档字符串时,有没有办法让Vim自动设置为72,并在我完成后将其设置回来?

python vim pep8 autocmd

26
推荐指数
2
解决办法
3065
查看次数

Python的赋值对齐(样式)

我非常喜欢遵循PEP 8中指定的样式标准.我有一个自动检查它的linter,因此我的代码肯定更好.

在PEP 8中只有一点,E251和E221感觉不太好.来自JavaScript背景,我曾经将变量赋值对齐如下:

var var1        = 1234;
    var2        = 54;
    longer_name = 'hi';

var lol = {
    'that'        : 65,
    'those'       : 87,
    'other_thing' : true
};
Run Code Online (Sandbox Code Playgroud)

在我看来,这大大提高了可读性.问题是,PEP 8不推荐这样做.对于词典,并不是那么糟糕,因为在冒号后允许空格:

dictionary = {
   'something':        98,
   'some_other_thing': False
}
Run Code Online (Sandbox Code Playgroud)

我可以在没有对齐的情况下"生活"变量赋值,但我完全不喜欢的是不能在函数调用中传递命名参数,如下所示:

some_func(length=      40,
          weight=      900,
          lol=         'troll',
          useless_var= True,
          intelligence=None)
Run Code Online (Sandbox Code Playgroud)

所以,我最终做的是使用字典,如下所示:

specs = {
    'length':       40,
    'weight':       900,
    'lol':          'troll',
    'useless_var':  True,
    'intelligence': None
}

some_func(**specs)
Run Code Online (Sandbox Code Playgroud)

或者只是简单地

some_func(**{'length':       40,
             'weight':       900,
             'lol':          'troll',
             'useless_var':  True,
             'intelligence': None})
Run Code Online (Sandbox Code Playgroud)

但我觉得这个工作比忽略PEP 8 E251/E221更糟糕.

什么是最佳做法?

多年后编辑 …

python coding-style pep8

26
推荐指数
1
解决办法
1万
查看次数

在这种情况下如何防止"过于宽泛的异常"?

我得到了一个可能失败的函数列表,如果一个失败,我不希望脚本停止,而是继续下一个函数.

我用这样的东西执行它:

list_of_functions = [f_a,f_b,f_c]
for current_function in list_of_functions:
    try:
        current_function()
    except Exception:
        print(traceback.format_exc())
Run Code Online (Sandbox Code Playgroud)

它工作正常,但它不符合PEP8:

捕获异常时,请尽可能提及特定异常,而不是使用bare except子句.

例如,使用:

try:
    import platform_specific_module
except ImportError:
    platform_specific_module = None
Run Code Online (Sandbox Code Playgroud)

一个裸的except:子句将捕获SystemExit和KeyboardInterrupt异常,使得用Control-C中断程序变得更加困难,并且可以掩盖其他问题.如果要捕获发出程序错误信号的所有异常,请使用除Exception之外的内容:(裸除了除了BaseException之外).

一个好的经验法则是将裸"除"子句的使用限制为两种情况:

如果异常处理程序将打印出来或记录回溯; 至少用户会意识到发生了错误.

如果代码需要做一些清理工作,但随后让异常向上传播并加注.尝试...终于可以更好地处理这种情况.

这个好方法怎么样?

python exception pep8

26
推荐指数
4
解决办法
4万
查看次数

init中导入但未使用的python pep8类

我正在使用python flake8库在python中进行PEP8检查.我__init__.py在我的一个子模块中的文件中有一个import语句,如下所示:

from .my_class import MyClass
Run Code Online (Sandbox Code Playgroud)

我在init文件中有这一行的原因是我可以从子模块导入MyClass from somemodule import MyClass而不必编写from somemodule.my_class import MyClass.

我想知道是否可以在纠正PEP8违规时保持此功能?

python pep8 flake8

26
推荐指数
3
解决办法
7319
查看次数