如何在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))