use*_*336 4 python exception python-2.7
怎么raise A, B办?它和它有什么不同raise A?
一些例子(在python 2.7的解释器上运行):
class E(Exception):
pass
e = E()
raise Exception, e
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.E
raise Exception(e)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception
raise (Exception, e)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception
Run Code Online (Sandbox Code Playgroud)
谢谢!
raise最多支持三个参数; 前两个是类型和值,第三个是用于异常的回溯对象.这条线:
raise Exception, value
Run Code Online (Sandbox Code Playgroud)
通常完全等同于:
raise Exception(value)
Run Code Online (Sandbox Code Playgroud)
所以,创建一个实例Exception(),将第二个值作为参数传递给异常构造函数.
但是,在您的示例中,第二个参数是E类型的实例,它是行的子类,Exception因此是行:
raise Exception, e
Run Code Online (Sandbox Code Playgroud)
相当于:
raise e
Run Code Online (Sandbox Code Playgroud)
你也可以在这里使用一个空元组:
raise E, ()
Run Code Online (Sandbox Code Playgroud)
或者None:
raise E, None
Run Code Online (Sandbox Code Playgroud)
只是为了增加E没有参数的异常类型的提升方式; 元组第二个参数指定要用于E异常类型的所有参数; 一个空的元组或None只是使其相当于raise E().
作为使用元组作为第一个参数,即等同于使用raise Exception作为Python会解开用作第一参数的嵌套元组.
如果第一个对象是类,则它将成为异常的类型.第二个对象用于确定异常值:如果它是类的实例,则实例将成为异常值.如果第二个对象是元组,则将其用作类构造函数的参数列表; 如果为None,则使用空参数列表,并将任何其他对象视为构造函数的单个参数.通过调用构造函数创建的实例用作异常值.
所有这些规则使得声明变得复杂,并且有多种方法可以提出功能上相同的异常.因此,raise已经从Python 3中完全删除了多参数语法,请参阅PEP 3109 - 在Python 3000中提高异常.
| 归档时间: |
|
| 查看次数: |
4769 次 |
| 最近记录: |