这两者有什么区别:
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]
选择你觉得对你未来的自我和同事更具可读性的东西。