如何在Python中使用"raise"关键字

Cap*_*cus 245 python raise keyword

我已经阅读了"加注"的官方定义,但我仍然不太明白它的作用.

简单来说,什么是"提高"?

示例用法会有所帮助.

Ign*_*ams 297

它有两个目的.

yentup给了第一个.

它用于提出自己的错误.

if something:
    raise Exception('My error!')
Run Code Online (Sandbox Code Playgroud)

第二种是在异常处理程序中重新加载当前异常,以便可以在调用堆栈中进一步处理它.

try:
  generate_exception()
except SomeException as e:
  if not can_handle(e):
    raise
  handle_exception(e)
Run Code Online (Sandbox Code Playgroud)

  • 我键入了它并得到"全局名称'错误'未定义".对于Python新手,你需要"提高异常('我的错误!')".您将"错误"替换为您的例外名称.您可以使用的标准例外列表如下:http://docs.python.org/2/library/exceptions.html (19认同)
  • @ alpha_989:它可以让你获得实际的异常实例. (5认同)
  • 请注意,在python 3.x中,新语法是`除了SomeException为e:` (4认同)

jac*_*ill 40

它用于引发错误.

if something:
    raise Exception('My error!')
Run Code Online (Sandbox Code Playgroud)

这里有一些例子


Soh*_* Si 34

raise没有任何参数是python语法的特殊用法.这意味着获得异常并重新提升它.如果这种用法可以被调用reraise.

    raise
Run Code Online (Sandbox Code Playgroud)

来自Python语言参考:

如果不存在表达式,则raise会重新引发当前作用域中处于活动状态的最后一个异常.

如果raise单独使用而没有任何参数,则严格用于再加注.如果在没有再次引发另一个异常的情况下完成,则会显示以下错误: RuntimeError: No active exception to reraise


Sta*_*kop 11

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

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

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

  • 当我采用这种方法时,是否建议在发生错误的底层打印跟踪,或者在捕获携带错误的最高级别打印跟踪? (2认同)

Mar*_*ers 10

raise引发异常.其他一些语言使用动词'throw'代替.

它旨在表明错误情况; 它标志着情况对正常流动是特殊的.

引起的异常可以再次由代码"上游"被捕获(一个周围块,或更早在栈上的函数)来处理它,使用try,except组合.

  • @alper:`raise Exception("message") from e`用一个新的异常替换了`e`异常,但只是一个普通的`Exception`实例没有任何意义。如果“e”是“TypeError”或“ValueError”或“LibrarySpecificException”,您现在无法再捕获这些特定异常,因为您将其替换为“Exception”。 (2认同)

sam*_*hen 9

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

if (a < b):
    raise ValueError()
Run Code Online (Sandbox Code Playgroud)

或者处理一些错误,然后在错误处理过程中传递它们:

try:
    f = open('file.txt', 'r')
except IOError:
    # do some processing here
    # and then pass the error on
    raise
Run Code Online (Sandbox Code Playgroud)