“,”和“as”在except语句中的区别是什么,例如:
try: pass except Exception, exception: pass
和:
try: pass except Exception as exception: pass
第二种语法在2.6中合法吗?它在Windows上的CPython 2.6中工作,但cygwin中的2.5解释器抱怨它无效。
如果它们在2.6中都有效,我应该使用哪个?
“as”语法是未来的首选语法,但是如果你的代码需要使用旧的Python版本(2.6是第一个支持新版本的版本),那么你就需要使用逗号语法。
最终文档是PEP-3110:捕获异常
简介:
as
是的,这是合法的。我运行的是Python 2.6
try: [] + 3 except Exception as x: print "woo hoo" >>> woo hoo
更新:使用as语法还有另一个原因。正如其他人指出的那样,使用,会使事情变得更加模糊;这就是造成不同的原因。从Python 2.6开始,有multicatch,它允许你在一个except块中捕获多个异常。在这种情况下,这样说更有表现力,更有腔调
,
multicatch
except
except (exception1, exception2) as e
而不是说
except (exception1, exception2), e
还是可以的
如果你想支持所有的python版本,你可以像这样使用sys.exc_info()函数:
sys.exc_info()
try: a = 1/'0' except (ZeroDivisionError, TypeError): e = sys.exc_info()[1] print(e.args[0])
(来源:http://python3porting.com/noconv.html)
从Python 3.7(不确定其他版本)开始,不再支持'逗号'语法:
源文件exception_comma.py:
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