Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是';提出a、b、c和#x27;和';提高(a、b、c)和#x27;在Python2.7中也是如此_Python_Python 2.7_Exception - Fatal编程技术网

是';提出a、b、c和#x27;和';提高(a、b、c)和#x27;在Python2.7中也是如此

是';提出a、b、c和#x27;和';提高(a、b、c)和#x27;在Python2.7中也是如此,python,python-2.7,exception,Python,Python 2.7,Exception,有人能解释一下为什么或者为什么在Python2.7中“raisea,b,c”和“raise(a,b,c)”是相同的吗 我试图找到有关元组是如何从中处理的信息,但我无法确定是否可以使用上述表达式来代替其他表达式 以下是一些背景。 我有一个Python2代码,其中有很多下面的语句 raise e,v,t Python3给出了这个语法错误。 将其转换为以下内容可以避免Python3编译器错误,但我想验证Python2和Python3中的意图是否保持相同 raise (e,v,t) raise从未将

有人能解释一下为什么或者为什么在Python2.7中“raisea,b,c”和“raise(a,b,c)”是相同的吗

我试图找到有关元组是如何从中处理的信息,但我无法确定是否可以使用上述表达式来代替其他表达式

以下是一些背景。 我有一个Python2代码,其中有很多下面的语句

raise e,v,t
Python3给出了这个语法错误。 将其转换为以下内容可以避免Python3编译器错误,但我想验证Python2和Python3中的意图是否保持相同

raise (e,v,t)
raise
从未将元组作为参数。在Python2中,语法看起来像一个元组,这就是造成混淆的原因。Python3的语法发生了重大变化,删除了冗余的异常类类型,并使用关键字
from
代替逗号

在Python 2中:

raise a, b, c
在Python 3中变成:

raise b.with_traceback(c)
raise
从未将元组作为参数。在Python2中,语法看起来像一个元组,这就是造成混淆的原因。Python3的语法发生了重大变化,删除了冗余的异常类类型,并使用关键字
from
代替逗号

在Python 2中:

raise a, b, c
在Python 3中变成:

raise b.with_traceback(c)

切勿将元组传递给
raise
。它不会做你所期望的

在Python2和Python3上,
raise
被记录为不接受元组。但是,Python2在
raise
实现中有一个参数,如果
raise
的第一个(或唯一的)参数是一个元组,它将被其第一个元素反复替换,直到Python达到非元组的值为止。我不知道为什么会这样,但它的意思是

raise ((Exception,), "other", "tuple", "items", "get", "ignored")
被当作

raise Exception
这是一个例子。Python3的行为会出错,因为元组不是例外


在Python3上引发异常的语法已更改。Python2语句

raise ExceptionType, value, traceback
现在是

raise ExceptionType(value).with_traceback(traceback)
或者,如果
例外类型
的实例

raise value.with_traceback(traceback)
不幸的是,这些语法是不兼容的,以至于您甚至不能根据您的Python版本编写这两个语法并选择运行哪一个。在代码运行之前,您将得到一个语法错误


解决此问题的最简单方法是使用兼容性库。例如,使用:


切勿将元组传递给
raise
。它不会做你所期望的

在Python2和Python3上,
raise
被记录为不接受元组。但是,Python2在
raise
实现中有一个参数,如果
raise
的第一个(或唯一的)参数是一个元组,它将被其第一个元素反复替换,直到Python达到非元组的值为止。我不知道为什么会这样,但它的意思是

raise ((Exception,), "other", "tuple", "items", "get", "ignored")
被当作

raise Exception
这是一个例子。Python3的行为会出错,因为元组不是例外


在Python3上引发异常的语法已更改。Python2语句

raise ExceptionType, value, traceback
现在是

raise ExceptionType(value).with_traceback(traceback)
或者,如果
例外类型
的实例

raise value.with_traceback(traceback)
不幸的是,这些语法是不兼容的,以至于您甚至不能根据您的Python版本编写这两个语法并选择运行哪一个。在代码运行之前,您将得到一个语法错误


解决此问题的最简单方法是使用兼容性库。例如,使用:


你试过了吗?你得到同样的结果了吗?你试过检查Python3吗?@AChampion:我在python解释器中尝试了
x=1,2,3
x=(1,2,3)
,得到了相同的“type(x)”,这就是为什么我不知道这是否是一个安全的更改。换句话说,不,这是不一样的。事实上,在Python3中,如果您执行该行,您将得到一个错误,因为它将尝试调用该实例(这是一个元组),并且您只能
引发派生自
BaseException
的对象。您是否尝试过它们?你得到同样的结果了吗?你试过检查Python3吗?@AChampion:我在python解释器中尝试了
x=1,2,3
x=(1,2,3)
,得到了相同的“type(x)”,这就是为什么我不知道这是否是一个安全的更改。换句话说,不,这是不一样的。事实上,在Python3中,如果您执行该行,您将得到一个错误,因为它将尝试调用该实例(这是一个元组),并且您只能
引发派生自
BaseException
对象,因为您将异常链接语法与备用回溯的语法混合在一起。选择不同回溯的方法是方法,因此它是
raisea(b)。使用
traceback(c)
,或者
raiseb。如果
b
已经是
a
的一个实例(或者其他一些变体之一,因为Python 2有很多方法来解释第二个
raise
参数),则使用
@用户2357112谢谢,我误读了文档。实际上,除了一个简单的
异常
类之外,我从来没有尝试过提出任何东西。您已经将异常链接语法与备用回溯的语法混淆了。选择不同回溯的方法是方法,因此它是
raisea(b)。使用
traceback(c)
,或者
raiseb。如果
b
已经是
a
的一个实例(或者其他一些变体之一,因为Python 2有很多方法来解释第二个
raise
参数),则使用
@用户2357112谢谢,我误读了文档。实际上,除了一个简单的
异常
类之外,我从未尝试过提出任何东西。