除了陈述中的','和'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中都有效,我应该使用哪个?
答案 0 :(得分:269)
最终文件为PEP-3110: Catching Exceptions
要点:
as
required 为变量分配例外。as
语法,因为它不那么模糊,并且与Python 3.x向前兼容。as
。答案 1 :(得分:37)
是的,这是合法的。我正在运行Python 2.6
try:
[] + 3
except Exception as x:
print "woo hoo"
>>>
woo hoo
更新:使用as
语法还有另一个原因。正如其他人指出的那样,使用,
会使事情变得更加含糊不清;而这就是产生差异的原因。从Python 2.6开始,multicatch
允许您catch multiple exceptions in one except
block。在这种情况下,它更具表现力和pythonic来说
except (exception1, exception2) as e
而不是说
except (exception1, exception2), e
仍然可以使用
答案 2 :(得分:17)
“as”语法是未来的首选语法,但是如果您的代码需要使用较旧的Python版本(2.6是第一个支持新版本),那么您将需要使用逗号语法。
答案 3 :(得分:9)
如果你想支持所有的python版本,你可以像这样使用sys.exc_info()函数:
try:
a = 1/'0'
except (ZeroDivisionError, TypeError):
e = sys.exc_info()[1]
print(e.args[0])
答案 4 :(得分:0)
从Python 3.7开始(不确定其他版本),不再支持'逗号'语法:
源文件exception_comma.py
:
try:
result = 1/0
except Exception, e:
print("An error occurred")
exit(1)
exit(0)
$ python --version --> Python 2.7.10
$ python exception_comma.py
An error occurred
$ python3 --version --> Python 3.7.2
$ python3 exception_comma.py
File "exception_comma.py", line 3
except Exception, e:
^
SyntaxError: invalid syntax