提出错误的'e'有什么作用?

时间:2013-11-11 20:52:57

标签: python exception python-2.7 exception-handling try-except

我已经为初学者参加了我的python讲座,其中某个主题没有得到很好的解释。那么这e做了什么?

def x(a, b):
    try:
        return a / b

    except ZeroDivisionError, e:
        return 0

4 个答案:

答案 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)

使用新语法可能更容易:

except ValueError as e:
    print e 

读得更清楚 - 你要给例外一个名字,在这种情况下只是e。有关错误处理的信息,请参阅this tutorial