如果退出程序,使用raise有什么意义? 让崩溃发生会不会同样有效?
如果我省略了try-except块,当除以零时该函数崩溃并显示原因。还是有一些我不知道的其他用途?
def div(x,y):
try:
return(x/y)
except ZeroDivisionError as problem:
raise (problem)
答案 0 :(得分:1)
我的案例效果是一样的。但是你可能想要在出现错误(清理等)的情况下执行一些额外的逻辑,并且可能会引发一个不同的(可能是自定义的)错误,而不是原始系统的低级错误,就像消息“数据不正确,请检查输入” 。这可以通过捕获错误并提出另一个错误来完成。
答案 1 :(得分:1)
使用加注没有意义(在这种情况下)。通常,你会在那里做一些代码来做“其他事情” - 可能包括输出更多的调试信息,写出一些日志数据,用不同的参数集重试操作等等。
我不确定你的情况有多大价值,当发生异常时它只是重新加注它 - 似乎有人(也许)打算在那里写一些处理代码,但是从来没有到过它
异常处理用例的一些很好的例子在Python Exception Handling Wiki中 - > http://wiki.python.org/moin/HandlingExceptions
答案 2 :(得分:0)
重新引发异常的原因是允许任何代码调用你的机会在你自己完成一些事情之后处理它。例如,您已关闭正在使用的文件(因为清洁度是一种优点),但您的代码无法继续。
如果您不打算处理异常,那么不,没有理由为它编写异常处理程序!
重新引发异常的正确方法是简单地使用raise
而不使用任何参数。这样,无论谁捕获异常(或者脚本的用户,如果没有人捕获它)都会得到一个正确的堆栈跟踪,告诉它最初引发异常的位置。