繁体   English   中英

Python try...except 逗号 vs 'as' in except

[英]Python try...except comma vs 'as' in except

',' 和 '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 中有效,我应该使用哪个?

最终文档是PEP-3110:Catching Exceptions

概括:

  • 在 Python 3.x 中,需要使用as将异常分配给变量。
  • 在 Python 2.6+ 中,使用as语法,因为它的歧义要少得多,并且与 Python 3.x 向前兼容。
  • 在 Python 2.5 及更早版本中,使用逗号版本,因为as不受支持。

是的,这是合法的。 我正在运行 Python 2.6

try:
    [] + 3
except Exception as x:
    print "woo hoo"

>>> 
woo hoo

更新:使用as语法还有另一个原因。 正如其他人指出的那样,使用,会使事情变得更加模棱两可; 这就是与众不同的原因。 从 Python 2.6 开始,有multicatch允许您在一个except block 中捕获多个异常 在这种情况下,说起来更有表现力和pythonic

except (exception1, exception2) as e

而不是说

except (exception1, exception2), e

这仍然有效

“as”语法是未来的首选语法,但是如果您的代码需要使用较旧的 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

从 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM