假设我们有以下代码:
print("...")
might_throw_type_error()
print("...")
might_throw_index_error()
如果我们想处理这些函数可能出现的异常,首选的方法是:
完全分离“业务”代码和错误处理
try:
print("...")
might_throw_type_error()
print("...")
might_throw_index_error()
except IndexError:
# index error handling logic
raise
except TypeError:
# index error handling logic
raise
分离逻辑和错误处理,但尝试从可能引发错误的第一个语句开始
print("...")
try:
might_throw_type_error()
print("...")
might_throw_index_error()
except IndexError:
# index error handling logic
raise
except TypeError:
# index error handling logic
raise
异常处理应该只包装我们希望引发的语句
print("...")
try:
might_throw_type_error()
except TypeError:
# index error handling logic
raise
print("...")
try:
might_throw_index_error()
except IndexError:
# index error handling logic
raise
请注意,如果捕获异常,则不希望继续
这完全取决于你想要达到的目标——如果你想使用#1方法,如果第一个
might_throw_index_error
出了问题,那么下面的print
和第二个might_throw_index_error
将永远不会被执行。你知道吗另一方面,最后一个可以保证至少secon
print
会一直开火。你知道吗这些方法中的每一种都是好的,但这取决于您希望对应用程序流做什么。你知道吗
创建一个decorator并将该decorator添加到每个函数定义中。有关详细信息,请查看A guide to Python's function decorators。例如,您的装饰者应该是:
现在添加这个decorator,函数定义如下:
现在您只需调用函数:
每次调用它时,都不必担心显式处理错误。你知道吗
相关问题 更多 >
编程相关推荐