如何创建具有多个原因的python异常?

2024-04-20 08:50:27 发布

您现在位置:Python中文网/ 问答频道 /正文

如何引发具有多种原因的python异常,类似于Java的addSuppressed()特性?例如,我有一个要尝试的多个方法的列表,如果它们都不起作用,我想引发一个异常,其中包括所有尝试过的方法的异常。即:

exceptions = []
for method in methods_to_try:
  try:
    method()
  except Exception as e:
    exceptions.append(e)
if exceptions:
  raise Exception("All methods failed") from exceptions

但是这段代码失败了,因为raise ... from ...语句只需要一个异常,而不是一个列表。Python2或3解决方案是可以接受的。必须保留所有回溯和异常消息。你知道吗


Tags: 方法infrom列表forexception原因特性
2条回答

改用日志记录

如果使用日志模块对您来说是可以接受的,我想记录捕获的单个异常并只引发一个整体异常是最干净的。你知道吗

如果您只想在所有尝试过的函数都出错的情况下输出日志消息,那么这是来自logging cookbook的缓冲记录器的理想情况 您可以将其修改为始终在调试级别进行日志记录,但如果所有子函数都引发错误,则将级别提升为错误。你知道吗

创建最后一个异常时,只需将异常作为参数传递。你知道吗

for method in methods_to_try:
    try:
        method()
    except Exception as e:
        exceptions.append(e)
if exceptions:
    raise Exception(*exceptions)

它们将在args属性中可用。你知道吗

相关问题 更多 >