Answers:
权威性文件是PEP-3110:捕获异常
摘要:
as
被要求对异常分配给一个变量。as
语法,因为它的模棱两可远,并且与Python 3.x向前兼容。as
不支持Python 2.5和更早版本的情况下,请使用逗号版本。是的,这是合法的。我正在运行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
仍然可以工作
except NameError, ValueError:
想知道为什么ValueError
从来没有捕获到异常。或使用except (NameError, e):
了,留下了一NameError
对'e'
!
如果要支持所有python版本,可以使用如下sys.exc_info()
函数:
try:
a = 1/'0'
except (ZeroDivisionError, TypeError):
e = sys.exc_info()[1]
print(e.args[0])
as
目标(以及其余异常信息)del
在退出该except
块后即隐含地被执行(这防止了存储回溯中涉及的某些循环引用延迟了内存的释放,直到循环GC开始运行为止) )。因此,该等效代码略微等效,除非您try/finally
在该except
块内使用a 来确保del e
在退出该except
块之前执行了该代码。
从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
as
是在Python 3.x中将异常分配给本地的唯一方法。但as
不是必需的,因为如果根本不需要它,则不必指定它。