我已经为初学者参加了我的python讲座,其中某个主题没有得到很好的解释。那么这e
做了什么?
def x(a, b):
try:
return a / b
except ZeroDivisionError, e:
return 0
答案 0 :(得分:8)
已将捕获的异常分配给名称e
。您可以选择任何有效的Python标识符:
except ZeroDivisionError, caught_exception:
这允许您使用捕获的异常;也许是为了打印错误消息,或者为了其他目的使用异常的属性。请参阅Python教程的Handling Exceptions chapter。
已弃用except <Exception>, <name>:
语法,支持:
except ZeroDivisionError as e:
更具可读性,避免了与语法混淆以捕获多种异常类型:
except (ZeroDivisionError, ValueError):
由于您发布的功能不使用e
,因此可以安全删除它:
def x(a, b):
try:
return a / b
except ZeroDivisionError:
return 0
答案 1 :(得分:1)
它将捕获的错误生成的消息保存在名称e
中。以下是演示:
>>> 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>>
>>> try:
... 1/0
... except ZeroDivisionError, e:
... print e
...
integer division or modulo by zero
>>>
但是你应该注意两件事。首先,您不需要使用名称e
。您可以选择所需的任何变量名称。其次,您弃用的语法已被弃用,以支持:
except Exception as e:
此外,我想补充一点,您的特定功能可以像这样重写:
def x(a, b):
return a/b if b else 0
在那里使用try / except块是不必要的,因为函数从不使用它,所以实际上不需要e
。
答案 2 :(得分:1)
由于ZeroDivisionError不是解释“e”目的的一个很好的例子(可能是你不清楚的原因),我将用不同的错误解释
例外: 通常,当Python程序遇到无法继续的情况(错误的代码)时,它会引发异常。异常是表示错误的Python对象。
在你的Python解释器上,如果你对未定义的变量(或实例)做任何事情,你会得到这样的错误
>>> a = 1
>>> print a
1
>>> print b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
>>>
NameError 是Exception raise的名称
名称'b'未定义是引发异常的附加信息
让我们用try和except块
重复相同的操作>>>
>>>
>>> try:
... print a
... print b
... except NameError:
... print "I got NameError"
...
1
I got NameError
>>>
输出未显式导致此异常的变量/实例。 您可能会觉得,如果您可以访问口译员提供的其他信息,您可以处理此问题
这是可选参数(除了)“e”或者你想要调用的任何内容变得方便
>>> try:
... print a
... print b
... except NameError, e:
... print "I got NameError"
... print "Addition Information is:", e
...
...
1
I got NameError
Addition Information is: name 'b' is not defined
>>>
正如其他人所指出的,建议使用以下惯例
except NameError as e
答案 3 :(得分:0)