Python中try...except中的逗号与'as'区别

264 投票
5 回答
107048 浏览
提问于 2025-04-15 20:58

在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 不被支持。

撰写回答