这两者有什么区别:

except:
    # do something


except BaseException as be:
    print(be)

我的意思是,在第一种情况下,所有可能的异常都会被捕获,但在第二种情况下,这是真的吗?
还可以使用第一个案例打印错误消息吗?

最佳答案

实际上,对于任何当前的python版本,except:except BaseException:都没有区别。
这是因为不能将任何类型的对象作为异常引发。raise statement明确禁止提升任何其他内容:
[…]引发将第一个表达式计算为异常对象。它必须是BaseException的子类或实例。
大胆强调我的。然而,情况并非总是如此,在旧的Python版本(2.4及更早版本)中,也可以使用字符串作为异常。
这样做的好处是,您可以轻松地访问捕获的异常。为了能够添加as targetname,您必须捕获特定的异常类,只有BaseException才会这样做。
您仍然可以使用sys.exc_info()访问当前活动的异常,但是:

except:
    be = sys.ext_info()[1]

选择你觉得对你未来的自我和同事更具可读性的东西。

10-02 01:08