“你应该尽量在你的代码中使用尽可能少的 except 子句”
很容易在代码中乱扔异常:
def solve_linear(mat1, mat2):
det1 = determinant(mat1)
det2 = determinant(mat2)
try:
return det1 / det2
except ZeroDivisionError:
raise NoSolution
在这里,让ZeroDivisionError
传播可能很好。你不需要抓住它。
“您使用的通常是内部调用,应该总是成功”
例如,看看这个读取文件或返回缓存值的代码。它通常会成功,尽管有KeyError
例外:
def read_file(path):
try:
return cache[path]
except KeyError:
fp = open(path, 'rb')
data = fp.read()
fp.close()
cache[path] = data
return data
“或者是一个主要功能中的一个包罗万象的东西。”
如果您的程序是交互式的,您可能希望在顶层捕获几乎所有内容。这是交互式命令行程序的顶部循环:
def main():
while True:
try:
text = raw_input('enter command: ')
cmd = parse_command(text)
except EOFError:
return
except KeyboardInterrupt:
return
except ValueError:
print 'Syntax error'
continue
try:
run_cmd(cmd)
except SystemExit:
raise
except Exception:
traceback.print_exc()