Python try...except 中的逗号与 except 中的 'as'
- 2025-01-13 08:53:00
- admin 原创
- 120
问题描述:
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 中都有效,我应该使用哪一个?
解决方案 1:
权威文档是PEP-3110:捕获异常
概括:
在 Python 3.x 中,需要使用
as
来为变量分配异常。在 Python 2.6+ 中,使用该
as
语法,因为它的歧义更少,并且与 Python 3.x 向前兼容。在 Python 2.5 及更早版本中,使用逗号版本,因为
as
不受支持。
解决方案 2:
是的,这是合法的。我正在运行 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
这仍然有效
解决方案 3:
“as”语法是今后的首选语法,但是如果您的代码需要与旧版 Python 一起使用(2.6 是第一个支持新版本的版本),那么您将需要使用逗号语法。
解决方案 4:
如果您想支持所有 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)
解决方案 5:
从 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
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD