'as'关键字在异常处理中如何工作?



在下面的代码中

>>> try:
...     a = 12 / 0
... except Exception as e:
...     print(e)
... 
division by zero
>>> 

谷歌表示,as关键字用于创建别名

那么为什么下面的代码不起作用呢?

>>> try:
...     a = 12 / 0
... except Exception:
...     print(Exception)
... 
<class 'Exception'>
>>> 

根据一些来源,它创建了一个Exception类的对象。

那么为什么下面的代码什么都不打印呢?

>>> try:
...     a = 12 / 0
... except Exception:
...     a = Exception()
...     print(a)
... 
>>> 

我的问题是:

  1. 如果as关键字充当别名,为什么第二个示例不起作用(它没有打印错误,而是打印对Exception类的引用(?

  2. 如果as关键字创建了Exception类的对象,为什么第三个示例不起作用(它没有打印错误,而是没有打印任何内容(?

您误读了引用。as关键字用于创建别名,但仅在import语句中使用。它与except的意义完全不同。在这种情况下,它只声明一个将保存异常对象的变量。如果说except Exception as e,那么e将是类型为Exception的对象。

在你的最后一个例子中:

try:
a = 12/0
except Exception:
a = Exception()
print(a)

您没有捕获引发的异常。相反,您正在创建一个全新的Exception选项。这样的对象还没有包含异常,因此没有打印任何内容。如果您想要捕获的异常,则必须使用as子句。

最新更新