Python尝试…除了逗号vs';as';除了
except语句中的“,”和“as”有什么区别,例如:Python尝试…除了逗号vs';as';除了,python,python-2.6,Python,Python 2.6,except语句中的“,”和“as”有什么区别,例如: try: pass except Exception, exception: pass 以及: 2.6中的第二种语法合法吗?它在Windows上的CPython 2.6中工作,但cygwin中的2.5解释器抱怨它无效 如果它们在2.6中都有效,我应该使用哪一种?首选“as”语法,但是如果您的代码需要使用较旧的Python版本(2.6是第一个支持新版本),则需要使用逗号语法。首选“as”语法,但是,如果您的代码需要使用较旧的
try:
pass
except Exception, exception:
pass
以及:
2.6中的第二种语法合法吗?它在Windows上的CPython 2.6中工作,但cygwin中的2.5解释器抱怨它无效
如果它们在2.6中都有效,我应该使用哪一种?首选“as”语法,但是如果您的代码需要使用较旧的Python版本(2.6是第一个支持新版本),则需要使用逗号语法。首选“as”语法,但是,如果您的代码需要使用较旧的Python版本(2.6是第一个支持新版本的版本),那么您需要使用逗号语法。最终文档是 总结:
- 在Python3.x中,需要使用
为变量分配异常as
- 在Python2.6+中,使用
语法,因为它不那么模棱两可,并且与Python3.x向前兼容作为
- 在Python2.5及更早版本中,使用逗号版本,因为不支持
as
- 在Python3.x中,需要使用
为变量分配异常as
- 在Python2.6+中,使用
语法,因为它不那么模棱两可,并且与Python3.x向前兼容作为
- 在Python2.5及更早版本中,使用逗号版本,因为不支持
as
- 是的,这是合法的。我正在运行Python 2.6
try:
[] + 3
except Exception as x:
print "woo hoo"
>>>
woo hoo
更新:使用作为
语法还有另一个原因。正如其他人指出的那样,使用,
会使事情变得更加模棱两可;这就是区别所在。从Python2.6开始,就有了multicatch
,它允许您执行以下操作。在这种情况下,这样说更富有表现力,也更像蟒蛇
except (exception1, exception2) as e
而不是说
except (exception1, exception2), e
这仍然有效是的,这是合法的。我正在运行Python 2.6
try:
[] + 3
except Exception as x:
print "woo hoo"
>>>
woo hoo
更新:使用作为
语法还有另一个原因。正如其他人指出的那样,使用,
会使事情变得更加模棱两可;这就是区别所在。从Python2.6开始,就有了multicatch
,它允许您执行以下操作。在这种情况下,这样说更富有表现力,也更像蟒蛇
except (exception1, exception2) as e
而不是说
except (exception1, exception2), e
如果要支持所有python版本,可以使用如下函数使用
sys.exc_info()
,该函数仍然有效:
try:
a = 1/'0'
except (ZeroDivisionError, TypeError):
e = sys.exc_info()[1]
print(e.args[0])
(来源:)如果您想支持所有python版本,可以使用以下函数:
try:
a = 1/'0'
except (ZeroDivisionError, TypeError):
e = sys.exc_info()[1]
print(e.args[0])
(来源:)从Python 3.7(不确定其他版本)起,“逗号”语法不再受支持:
源文件异常\u逗号.py
:
try:
result = 1/0
except Exception, e:
print("An error occurred")
exit(1)
exit(0)
$python--版本-->python 2.7.10
$python3--version-->Python 3.7.2
异常\u逗号.py
:
try:
result = 1/0
except Exception, e:
print("An error occurred")
exit(1)
exit(0)
$python--版本-->python 2.7.10
$python3--version-->Python 3.7.2
Python 2.6之前的版本也允许使用元组捕获多个异常类型。但语法混乱;你会使用
除了NameError,ValueError:
然后想知道为什么ValueError
异常从未被捕获。或者使用了,除了(namererror,e):
,并且在'e'
中留下了namererror
!Python 2.6之前的版本也允许使用元组捕获多个异常类型。但语法混乱;你会使用除了NameError,ValueError:
然后想知道为什么ValueError
异常从未被捕获。或者使用了,除了(namererror,e):
,并且在'e'
中留下了namererror
!在Python3.x中,将用作是将异常分配给本地的唯一方法。但是as
不是必需的,因为如果根本不需要它,就不必指定它。在Python 3.x中,使用as
是将异常分配给本地的唯一方法。但是as
不是必需的,因为如果您根本不需要它,就不必指定它。注意:这里有一些特殊情况需要注意。在Py3中,as
目标(以及其余的异常信息)在退出except
块时隐式地del
ed(这可以防止存储的回溯中涉及的一些循环引用延迟内存释放,直到循环GC开始运行)。因此,此等效代码的等效性稍低,除非您在except
块中使用try/finally
,以确保在退出except
块之前执行dele
。注意:这里有一些特殊情况需要注意。在Py3中,as
目标(以及其余的异常信息)在退出except
块时隐式地del
ed(这可以防止存储的回溯中涉及的一些循环引用延迟内存释放,直到循环GC开始运行)。因此,此等效代码的等效性稍低,除非您在except
块中使用try/finally
,以确保在退出except
块之前执行dele
。