如何在python3中分解异常?

如何在python3中分解异常?,python,python-3.x,destructuring,Python,Python 3.x,Destructuring,此代码: try: raise ValueError(1,2,3) except ValueError as (a,b,c): print("a=%s, b=%s, c=%s" % (a,b,c)) 在Python 2中打印a=1、b=2、c=3,但在Python 3中引发SyntaxError: except ValueError as (a,b,c): ^ SyntaxError: invalid syntax 如

此代码:

try:
    raise ValueError(1,2,3)
except ValueError as (a,b,c):
    print("a=%s, b=%s, c=%s" % (a,b,c))
在Python 2中打印
a=1、b=2、c=3
,但在Python 3中引发
SyntaxError

    except ValueError as (a,b,c):
                         ^
SyntaxError: invalid syntax
如何在Python 3中分解异常?

以下内容似乎很管用(灵感来源于:


但是它很难看(并且添加了一行额外的代码),这是转换代码基2to3时的PITA。

这是代码高尔夫吗?(我看不出额外的代码行是个问题的其他原因…
print(“…%ex.args)
如果您担心行数的话,它会起作用。@cᴏʟᴅsᴘᴇᴇᴅ 如果从Python2转换到Python3,这可能是一个巨大的代码库中真正的难题。由于PEP没有明确说明这一特定语法,它指定在Python3中使用
as
,这使得它更加痛苦。(这似乎只是讨论为了捕获多个异常类型而放弃旧式的逗号分隔,而没有讨论在线自动解包异常)。坦白地说,我很惊讶地发现异常是可移植的。据介绍,这是一种适应老式字符串异常的黑客行为。
try:
    raise ValueError(1,2,3)
except ValueError as ex:
    a,b,c = ex.args
    print("a=%s, b=%s, c=%s" % (a,b,c))