Python尝试…除了逗号vs'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中都是有效的,我应该使用它?
权威性文件是PEP-3110:捕捉exception
概要:
- 在Python 3.x中,使用
as
可以将一个exception分配给一个variables。 - 在Python 2.6+中,使用
as
语法,因为它与Python 3.x的模糊性和向前兼容性要低得多。 - 在Python 2.5及更早版本中,使用逗号版本,因为不支持。
是的,这是合法的。 我正在运行Python 2.6
try: [] + 3 except Exception as x: print "woo hoo" >>> woo hoo
更新 :使用as
语法还有另一个原因。 正如其他人所指出的那样,使用使事情变得更加模糊; 这是什么使差异。 从Python 2.6开始,有一个multicatch
,它允许你捕获except
块except
多个exception 。 在这种情况下,说得更具performance力和pythonic
except (exception1, exception2) as e
而不是说
except (exception1, exception2), e
这仍然有效
如果你的代码需要使用老的Python版本(2.6是第一个支持新版本),那么你需要使用逗号语法。
如果你想支持所有的python版本,你可以像这样使用sys.exc_info()函数:
try: a = 1/'0' except (ZeroDivisionError, TypeError): e = sys.exc_info()[1] print(e.args[0])
(来源: http : //python3porting.com/noconv.html )