相关疑难解决方法(0)

在Python 3中已经存在异常时引发异常

在下面的代码中引发A第二个(B)时,我的第一个异常()会发生什么?

class A(Exception): pass
class B(Exception): pass

try:
    try:
        raise A('first')
    finally:
        raise B('second')
except X as c:
    print(c)
Run Code Online (Sandbox Code Playgroud)

如果运行X = A我得到:

Traceback (most recent call last):
  File "raising_more_exceptions.py", line 6, in 
    raise A('first')
__main__.A: first

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "raising_more_exceptions.py", line 8, in 
    raise B('second')
__main__.B: second

但如果X = B我得到:

second

问题

  1. 我的第一个例外去了哪里?
  2. 为什么只有最外层的例外可以捕获?
  3. 如何剥离最外层的异常并重新引用先前的异常?

Update0

这个问题专门针对Python 3,因为它的异常处理与Python 2完全不同.

python exception-handling exception python-3.x

38
推荐指数
5
解决办法
3万
查看次数