
368
|
附录
E
随着你的代码变得更高级和复杂,问题会变得越来越难办。由于你的代码更加抽象,你会
将所有的代码保存在变量中。如果一个函数或方法返回一个不符预期的类型(例如
None
而
不是列表),这个对象可能被传递到另一个函数中——可能是一个不接受
None
类型的函数,
之后抛出一个错误。很可能错误被捕获了,但代码会认为异常是因为另外的问题触发的,
并且继续执行。这会很快地脱离你的控制,并且变成一个相当难以调试的问题。
对于如何处理这些问题,最好的建议是编写非常精准又清晰的代码。你应该积极测试你的
代码(确保没有
bug
),持续关注你的脚本,并注意任何反常的行为,以此确保函数永远返
回期待的内容。你还需要添加日志来帮助确认对象包含的内容。除此之外,清楚你捕获的
异常,而不只是捕获所有的异常,这会帮助你更容易地找到和修复问题。
最后,有时
Python
会实现
PEP-484
(
https://www.python.org/dev/peps/pep-0484/
),它包含了
类型提示,允许你检查传递的变量和代码,以自我检查这些问题。这在未来
Python 3
发布
之前可能不会被合并,但是好消息是,这已经在进行当中,你可以期待在未来看到更多的
有关类型检查的结构。
E.9
捕获多个异常
随着代码的发展,你会想要在同一行代码中捕获多个异常。举个例子,你可能想要捕获一
个
TypeError
,同时还有
AttributeError
。如果你以为传递的是一个字典,而实际上传递的
是一个列表,可能就是这种情况。它可能有一些相同的属性,但是不是所有属性。如果你 ...