Python使用两个参数提升

Python使用两个参数提升,python,python-2.7,exception,Python,Python 2.7,Exception,提升A、B的功能是什么?它与提出的有什么不同 一些示例(在python 2.7的解释器上运行): E类(例外): 通过 e=e() 引发异常,e 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 __主要的 引发异常(e) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 例外情况 提高(例外,e) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 例外情况 谢谢 raise最多支持三个参数;前两个是类型和值,第三个是用于异常的回溯对象。该行: raise Exception, v

提升A、B的功能是什么?它与
提出的有什么不同

一些示例(在python 2.7的解释器上运行):

E类(例外):
通过
e=e()
引发异常,e
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
__主要的
引发异常(e)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
例外情况
提高(例外,e)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
例外情况

谢谢

raise
最多支持三个参数;前两个是类型和值,第三个是用于异常的回溯对象。该行:

raise Exception, value
通常完全等同于:

raise Exception(value)
因此,创建一个
Exception()
的实例,将第二个值作为参数传递给异常构造函数

但是,在您的示例中,第二个参数是
E
类型的一个实例,它是
Exception
的子类,因此该行:

raise Exception, e
相当于:

raise e
您也可以在此处使用空元组:

raise E, ()

raise E, None
只是为了增加不带参数的
E
异常类型的提升方法的数量;tuple第二个参数指定用于
E
异常类型的所有参数;空元组或
None
只会使其等效于
raisee()

至于使用元组作为第一个参数,这相当于使用
raiseexception
As

从:

如果第一个对象是类,它将成为异常的类型。第二个对象用于确定异常值:如果它是类的实例,则该实例将成为异常值。如果第二个对象是元组,则将其用作类构造函数的参数列表;如果为None,则使用空参数列表,并且任何其他对象都被视为构造函数的单个参数。通过调用构造函数创建的实例被用作异常值


所有这些规则都使语句变得复杂,并且有多种方法可以提出功能等效的异常。因此,多参数
raise
语法已从Python 3中完全删除,请参阅。

谢谢您的回答。您说的“引发异常”,e类似于“引发异常(e)”,但我的示例显示它们是不同的。@user3033336:对,因为您使用了
e=e()
,这是意外的。@user3033336:已更新;Python确实检测到您使用的值是异常的(子类)。@user3033336:重写以更好地覆盖您的情况。因此对于
raise a,B(c)
规则是:
if issubclass(a,BaseException)和isinstance(B(c),a):raise B(c);否则:提出A(B(c))
。我说得对吗?谢谢
raise E, None