Lint

PyLint

流程控制

  1. # Yes!
  2. if x is not y
  3. # No!
  4. if not x is y

在for 和while 循环体后避免使用else语句块

导入

绝对路径导入模块

  1. # Yes
  2. import sound.effects.echo
  3. from sound.effects import echo
  4. # No

异常

  1. # Yes
  2. raise MyException("Error Message")
  3. raise MyException
  4. # No
  5. raise MyException, 'Error Message'
  6. raise 'Error Message'

尽量减少try/except块中代码量。try中越多期望外的异常越多。

使用as而不是逗号

  1. try:
  2. raise Error
  3. except Error as error:
  4. pass

列表推导

复杂表达式不要使用,单个for循环+if过滤可以使用。

避免使用特花哨特性

元类(metaclasses), 字节码访问, 任意编译(on-the-fly compilation), 动态继承, 对象父类重定义(object reparenting), 导入黑客(import hacks), 反射, 系统内修改(modification of system internals), 等等.

尽可能使用隐式false

  1. if foo:
  2. if not foo:

  1. # 好
  2. class Foo(Base):
  3. def __init__(self):
  4. super().__init__()
  5. # 孬 菱形继承会调用爷爷类两次构造函数
  6. class Foo(Base):
  7. def __init__(self):
  8. Base.__init__(self)

参考

https://www.python.org/dev/peps/pep-0008/
https://google.github.io/styleguide/pyguide.html