Python中try...except中的逗号与'as'区别
在except语句中,','和'as'有什么区别,比如:
try:
pass
except Exception, exception:
pass
还有:
try:
pass
except Exception as exception:
pass
第二种写法在2.6版本中合法吗?它在Windows上的CPython 2.6中可以正常工作,但在cygwin中的2.5解释器却说这是无效的。
如果它们在2.6中都是有效的,我应该使用哪一种呢?
5 个回答
17
“as”这种写法是未来推荐使用的方式,不过如果你的代码需要在旧版本的Python上运行(2.6是第一个支持这种写法的版本),那么你就得用逗号这种写法。
41
是的,这是合法的。我正在使用Python 2.6
try:
[] + 3
except Exception as x:
print "woo hoo"
>>>
woo hoo
更新: 使用as
语法还有另一个原因。正如其他人所指出的,使用,
会让事情变得更加模糊;而这就是区别所在。从Python 2.6开始,有了multicatch
,它允许你在一个except
块中同时捕获多个异常。这样的情况下,使用这种方式更清晰、更符合Python的风格
except (exception1, exception2) as e
而不是这样说
except (exception1, exception2), e
虽然这样也能工作
306
最权威的文档是 PEP-3110: 捕获异常
总结:
- 在 Python 3.x 中,使用
as
是 必须的,这样才能把异常赋值给一个变量。 - 在 Python 2.6 及以上版本中,建议使用
as
这种写法,因为它更清晰,而且与 Python 3.x 兼容。 - 在 Python 2.5 及更早的版本中,使用逗号的写法,因为
as
不被支持。