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 ,它允许你捕获exceptexcept多个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 )