Python尝试...除了逗号vs'as'之外

问题描述 投票:232回答:5

除语句中','和'as'之间有什么区别,例如:

try:
    pass
except Exception, exception:
    pass

和:

try:
    pass
except Exception as exception:
    pass

第二种语法在2.6中合法吗?它适用于Windows上的Python 2.6,但cygwin中的2.5解释器抱怨它无效。

如果它们在2.6中都有效,我应该使用哪个?

python python-2.6
5个回答
271
投票

最终文件是PEP-3110: Catching Exceptions

摘要:

  • 在Python 3.x中,需要使用as为变量分配异常。
  • 在Python 2.6+中,使用as语法,因为它不那么模糊,并且与Python 3.x向前兼容。
  • 在Python 2.5及更早版本中,请使用逗号版本,因为不支持as

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

这仍然有效


17
投票

“as”语法是未来的首选语法,但如果您的代码需要使用较旧的Python版本(2.6是第一个支持新版本),那么您将需要使用逗号语法。


9
投票

如果你想支持所有的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


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
© www.soinside.com 2019 - 2024. All rights reserved.