0

如果退出程序,使用 raise 有什么意义?让崩溃发生不是同样有效吗?

如果我忽略了 try-except 块,当我除以零并显示原因时,函数会崩溃。还是有其他我不知道的用途?

def div(x,y):
    try:
        return(x/y)
    except ZeroDivisionError as problem:
        raise (problem)
4

3 回答 3

1

我的案例效果是一样的。但是您可能希望在出现错误(清理等)的情况下执行一些额外的逻辑,并且可能会引发不同的(可能是自定义的)错误而不是原始系统低级错误,例如消息“数据不正确,请检查您的输入” . 这可以通过捕获错误并引发不同的错误来完成。

于 2013-08-05T00:25:38.523 回答
1

使用 raise 没有意义(在这种情况下)。通常,你会有一些代码来做“其他事情”——这可能包括输出更多的调试信息、写出一些日志数据、使用不同的参数集重试操作等等等等。

我不确定你的情况有多大价值,当发生异常时它只是重新引发它 - 似乎有人(也许)打算在那里编写某种处理代码,但从来没有解决过它。

异常处理用例的一些很好的例子在 Python 异常处理 Wiki --> http://wiki.python.org/moin/HandlingExceptions

于 2013-08-05T00:26:26.587 回答
0

重新引发异常的原因是让任何调用您的代码都有机会在您自己完成某些操作后处理它。例如,您关闭了您正在使用的文件(因为清洁是一种美德),但您的代码无法继续。

如果您不打算做任何事情来处理异常,那么不,没有理由为它编写异常处理程序!

重新引发异常的正确方法是简单地使用raise而不带任何参数。这样,任何捕获异常的人(或脚本的用户,如果没有人捕获它)都会获得正确的堆栈跟踪,该跟踪会告诉最初引发异常的位置。

于 2013-08-05T00:31:14.953 回答