多年后的今天,我再次被易变的默认参数所困扰。我通常不使用可变的默认参数,除非需要,但我认为随着时间的推移,我忘记了这一点。今天在应用程序中,我在一个 PDF 生成函数的参数列表中添加了 tocElements = [] ,现在在每次调用“ generatedpdf”之后,“目录”变得越来越长。:)
还有什么是我必须避免的?
总是以相同的方式导入模块,例如 from y import x和 import x是 被视为不同的模块。
不要使用 射程代替列表,因为 range()无论如何都会成为迭代器,下面的代码将会失败:
myIndexList = [0, 1, 3]
isListSorted = myIndexList == range(3) # will fail in 3.0
isListSorted = myIndexList == list(range(3)) # will not
同样的事情可以错误地做 Xrange:
myIndexList == xrange(3)
小心捕获多个异常类型:
try:
raise KeyError("hmm bug")
except KeyError, TypeError:
print TypeError
这会打印出“嗯,bug”,尽管它不是 bug; 看起来我们正在捕获这两种类型的异常,但是我们只捕获 KeyError 变量 输入错误,使用:
try:
raise KeyError("hmm bug")
except (KeyError, TypeError):
print TypeError