309

我已经阅读了“raise”的官方定义,但我仍然不太明白它的作用。

简单来说,什么是“加薪”?

示例用法会有所帮助。

4

6 回答 6

377

它有两个目的。

jackcogdill 给出了第一个。

它用于引发您自己的错误。

if something:
    raise Exception('My error!')

第二个是在异常处理程序中重新引发当前异常,以便可以在调用堆栈中进一步处理它。

try:
  generate_exception()
except SomeException as e:
  if not can_handle(e):
    raise
  handle_exception(e)
于 2012-12-19T17:32:03.200 回答
50

raise不带任何参数是 python 语法的一种特殊用法。这意味着获取异常并重新引发它。如果这种用法可以称为reraise.

    raise

来自Python 语言参考

如果不存在表达式, raise 会重新引发在当前范围内活动的最后一个异常。

如果raise单独使用没有任何参数,则严格用于reraise -ing。如果在未重新引发另一个异常的情况下完成,则会显示以下错误: RuntimeError: No active exception to reraise

于 2015-01-14T16:21:12.063 回答
49

它用于引发错误。

if something:
    raise Exception('My error!')

这里有一些例子

于 2012-12-19T17:28:28.097 回答
22

此外raise Exception("message")raisePython 3 引入了一种新形式,raise Exception("message") from e. 它称为异常链接,它允许您保留原始异常(根本原因)及其回溯。

它与 C# 的内部异常非常相似。

更多信息: https ://www.python.org/dev/peps/pep-3134/

于 2017-05-04T08:11:41.393 回答
17

作为错误检查的一部分,您可以使用它来引发错误:

if (a < b):
    raise ValueError()

或者处理一些错误,然后将它们作为错误处理的一部分传递:

try:
    f = open('file.txt', 'r')
except IOError:
    # do some processing here
    # and then pass the error on
    raise
于 2012-12-19T17:32:47.650 回答
12

raise导致引发异常。其他一些语言使用动词“投掷”。

它旨在指示错误情况;它标志着这种情况对于正常流程来说是异常的。

引发的异常可以被代码“上游”(周围的块,或堆栈上较早的函数)再次捕获,以使用try,except组合来处理它。

于 2012-12-19T17:30:15.363 回答