现在,我在except Exception:子句中捕获了异常,并执行print(exception)。由于始终打印<class 'Exception'>,因此结果不提供任何信息。我知道这曾经在python 2中起作用,但是我如何在python3中做到这一点?

最佳答案

我猜您需要将Exception分配给一个变量。作为shown in the Python 3 tutorial:

def fails():
    x = 1 / 0

try:
    fails()
except Exception as ex:
    print(ex)

为了简要说明,as是在某些复合语句中使用的伪分配关键字,用于将前面的语句分配或别名给变量。

在这种情况下,as将捕获的异常分配给一个变量,以允许有关该异常的信息在以后存储和使用,而不需要立即进行处理。 (这在Python 3 Language Reference: The try Statement中进行了详细讨论。)

另一个使用as的复合语句是with语句:
@contextmanager
def opening(filename):
    f = open(filename)
    try:
        yield f
    finally:
        f.close()

with opening(filename) as f:
    # ...read data from f...

在这里,with语句用于使用context managers定义的方法来包装块的执行。它的功能类似于纯净的生成器包中的扩展try...except...finally语句,并且as语句将上下文管理器中生成器生成的结果分配给变量以供扩展使用。
(这在Python 3 Language Reference: The with Statement中进行了详细讨论。)

最后,在导入模块时可以使用as,以将模块别名为另一个(通常较短)的名称:
import foo.bar.baz as fbb

Python 3 Language Reference: The import Statement中对此进行了详细讨论。

10-07 13:43
查看更多