0

我参加了一个针对初学者的 Python 讲座,其中某个主题没有得到很好的解释。那么这有什么作用e呢?

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

    except ZeroDivisionError, e:
        return 0
4

4 回答 4

8

捕获的异常分配给 name e。您可以选择任何有效的 Python 标识符:

except ZeroDivisionError, caught_exception:

这使您可以使用捕获的异常;也许是为了打印错误消息,或者将异常的属性用于其他目的。请参阅 Python 教程的处理异常章节

except <Exception>, <name>:语法已被弃用,取而代之的是:

except ZeroDivisionError as e:

这更具可读性,并且避免了与捕获多种异常类型的语法混淆:

except (ZeroDivisionError, ValueError):

由于您发布的功能不使用e,因此可以完全安全地删除它:

def x(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        return 0
于 2013-11-11T20:53:13.783 回答
3

由于 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是引发的异常的名称

name 'b' is not defined是引发异常的附加信息

让我们对 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
于 2013-11-11T22:21:26.220 回答
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因为函数从不使用它,所以确实没有必要。

于 2013-11-11T20:53:35.793 回答
0

使用新语法可能更容易:

except ValueError as e:
    print e 

读起来更清楚——您将为异常命名,在本例中为e. 请参阅本教程以了解错误处理。

于 2013-11-11T20:56:26.410 回答