没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
Docs » Python 风格指南 - 内容目录 » Python语言规范
Python语言规范
Lint
Tip
对你的代码运行pylint
定义:
pylint是一个在Python源代码中查找bug的工具. 对于C和C++这样的不那么动态的(译者注:
原文是less dynamic)语言, 这些bug通常由编译器来捕获. 由于Python的动态特性, 有些警告
可能不对. 不过伪告警应该很少.
优点:
可以捕获容易忽视的错误, 例如输入错误, 使用未赋值的变量等.
缺点:
pylint不完美. 要利用其优势, 我们有时侯需要: a) 围绕着它来写代码 b) 抑制其告警 c) 改进
它, 或者d) 忽略它.
结论:
确保对你的代码运行pylint.抑制不准确的警告,以便能够将其他警告暴露出来。
你可以通过设置一个行注释来抑制警告. 例如:
dict = 'something awful' # Bad Idea... pylint: disable=redefined-builtin
pylint警告是以一个数字编号(如 C0112 )和一个符号名(如 empty-docstring )来标识的. 在
编写新代码或更新已有代码时对告警进行抑制, 推荐使用符号名来标识.
如果警告的符号名不够见名知意,那么请对其增加一个详细解释。
采用这种抑制方式的好处是我们可以轻松查找抑制并回顾它们.
你可以使用命令 pylint --list-msgs 来获取pylint告警列表. 你可以使用命令
pylint --help-msg=C6409 , 以获取关于特定消息的更多信息.
相比较于之前使用的 pylint: disable-msg , 本文推荐使用 pylint: disable .
要抑制”参数未使用”告警, 你可以用”_”作为参数标识符, 或者在参数名前加”unused_”. 遇到
不能改变参数名的情况, 你可以通过在函数开头”提到”它们来消除告警. 例如:
def foo(a, unused_b, unused_c, d=None, e=None):
_ = d, e
return a
导入
Tip
仅对包和模块使用导入
定义:
模块间共享代码的重用机制.
优点:
命名空间管理约定十分简单. 每个标识符的源都用一种一致的方式指示. x.Obj表示Obj对象
定义在模块x中.
缺点:
模块名仍可能冲突. 有些模块名太长, 不太方便.
结论:
使用 import x 来导入包和模块.
使用 from x import y , 其中x是包前缀, y是不带前缀的模块名.
使用 from x import y as z , 如果两个要导入的模块都叫做y或者y太长了.
例如, 模块 sound.effects.echo 可以用如下方式导入:
from sound.effects import echo
...
echo.EchoFilter(input, output, delay=0.7, atten=4)
导入时不要使用相对名称. 即使模块在同一个包中, 也要使用完整包名. 这能帮助你避免无
意间导入一个包两次.
包
Tip
使用模块的全路径名来导入每个模块
优点:
避免模块名冲突. 查找包更容易.
缺点:
部署代码变难, 因为你必须复制包层次.
结论:
所有的新代码都应该用完整包名来导入每个模块.
应该像下面这样导入:
# Reference in code with complete name.
import sound.effects.echo
# Reference in code with just module name (preferred).
from sound.effects import echo
异常
Tip
允许使用异常, 但必须小心
定义:
异常是一种跳出代码块的正常控制流来处理错误或者其它异常条件的方式.
优点:
正常操作代码的控制流不会和错误处理代码混在一起. 当某种条件发生时, 它也允许控制流
跳过多个框架. 例如, 一步跳出N个嵌套的函数, 而不必继续执行错误的代码.
缺点:
可能会导致让人困惑的控制流. 调用库时容易错过错误情况.
结论:
异常必须遵守特定条件:
1. 像这样触发异常: raise MyException("Error message") 或者 raise MyException . 不
要使用两个参数的形式( raise MyException, "Error message" )或者过时的字符串异
常( raise "Error message" ).
2. 模块或包应该定义自己的特定域的异常基类, 这个基类应该从内建的Excepon类继承.
模块的异常基类应该叫做”Error”.
class Error(Exception):
pass
3. 永远不要使用 except: 语句来捕获所有异常, 也不要捕获 Exception 或者
StandardError , 除非你打算重新触发该异常, 或者你已经在当前线程的最外层(记得还
是要打印一条错误消息). 在异常这方面, Python非常宽容, except: 真的会捕获包括
Python语法错误在内的任何错误. 使用 except: 很容易隐藏真正的bug.
4. 尽量减少try/except块中的代码量. try块的体积越大, 期望之外的异常就越容易被触发.
这种情况下, try/except块将隐藏真正的错误.
5. 使用finally子句来执行那些无论try块中有没有异常都应该被执行的代码. 这对于清理资
源常常很有用, 例如关闭文件.
6. 当捕获异常时, 使用 as 而不要用逗号. 例如
try:
raise Error
except Error as error:
pass
全局变量
Tip
避免全局变量
定义:
定义在模块级的变量.
优点:
偶尔有用.
缺点:
导入时可能改变模块行为, 因为导入模块时会对模块级变量赋值.
结论:
避免使用全局变量, 用类变量来代替. 但也有一些例外:
1. 脚本的默认选项.
2. 模块级常量. 例如: PI = 3.14159. 常量应该全大写, 用下划线连接.
3. 有时候用全局变量来缓存值或者作为函数返回值很有用.
4. 如果需要, 全局变量应该仅在模块内部可用, 并通过模块级的公共函数来访问.
嵌套/局部/内部类或函数
Tip
剩余15页未读,继续阅读
XianZhe_
- 粉丝: 209
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- onenet_chongwukanhu_v06.apk
- 2022NOC软件创意编程赛项真题C++初中-决赛(有解析)
- 2022NOC软件创意编程赛项真题python初中-决赛(有解析)
- openLayer-本地数据加载 (day5)
- A题-正弦信号发生器.xdf
- 2022NOC软件创意编程赛项真题python小学高年级-决赛(有解析)
- mathml转换latex需要的xsl文件
- 2022NOC软件创意编程赛项真题图形化小学高年级-决赛(有解析)
- gbase驱动下载gbase-connector-java-8.3.81.53驱动下载
- 2022NOC软件创意编程赛项真题图形化小学低年级-决赛(有解析)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0