3 回答
TA贡献1801条经验 获得超8个赞
捕获所有异常处理程序没有错,只要它捕获的异常多于处理程序中的操作要处理的异常。异常处理程序中的操作旨在对所有错误执行清理,因此它证明了捕获所有异常处理程序的合理性。
也就是说,要在异常处理程序中重新引发异常,您应该改用该语句而不向其传递新对象,以便将调用堆栈保留在关联的回溯对象中以进行调试:raiseException
try:
do_the_thing()
except Exception:
kill_subprocesses()
raise
TA贡献1821条经验 获得超4个赞
如果您担心清洁过程但无法捕获所有可能的内容:try... finally
while keep_going_signal():
try:
do_the_thing()
except SomePrettyLikelySpecificException e:
handle_it()
finally:
if process_is_still_running():
kill_subprocesses()
当然,你必须自己供应。process_is_still_running()
可能会有一些异常(al)情况,它们会降低整个运行时,在这种情况下,您的子进程可能无法保存。
(编辑:此示例捕获了我们认为可以处理的可预测异常类型。其他人指出了这一点的意义和优点,以及重新抛出我们无法处理的那些。
https://docs.python.org/3/tutorial/errors.html
TA贡献1852条经验 获得超1个赞
捕获异常意味着您已准备好处理可能发生的某些类型的问题,并且您有一个计划,当发生这种情况时该怎么办。这通常应该尽可能狭窄,所以你实际上只处理你准备的特定问题,以及你有特定的补救措施。
现在,如果你的代码非常广泛,那么进行广泛的错误处理也是有意义的。假设你正在编写一个像Flask或Tornado这样的Web框架。您将调用用户提供的代码,对此您的影响为零,并且可能会引发任何类型的错误。但是,仅仅因为用户代码引发了错误,您不希望它影响Web服务器。因此,您始终使用尽可能广泛的异常处理程序将任何和所有调用封装到未知用户代码中,因为您的主要目标是保持服务器运行,而不管用户代码可能存在什么问题。
因此,是的,在适当的情况下使用通用异常处理程序是完全可以的。
添加回答
举报