处理除一个异常以外的所有异常

2024-05-14 13:36:13 发布

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

如何处理除了一个异常以外的所有异常?

try:
    something
except <any Exception except for a NoChildException>:
    # handling

像这样,除了没有破坏原始的回溯:

try:
    something
except NoChildException:
    raise NoChildException
except Exception:
    # handling

Tags: forexceptionanysomethingraisetryhandlingexcept
3条回答

我发现了一个上下文,在这个上下文中,捕获所有错误(只有一个错误)并不是坏事,即单元测试。

如果我有方法:

def my_method():
   try:
      something()
   except IOError, e:
      handle_it()

然后,它可能有一个单元测试,看起来像:

def test_my_method():
   try:
      my_module.my_method()
   except IOError, e:
      print "shouldn't see this error message"
      assert False
   except Exception, e:
      print "some other error message"
      assert False
   assert True

因为你现在已经检测到我的方法抛出了一个意外的异常。

我提出这个建议是对公认答案的改进。

try:
    dosomestuff()
except MySpecialException:
    ttype, value, traceback = sys.exc_info()
    raise ttype, value, traceback
except Exception as e:
    mse = convert_to_myspecialexception_with_local_context(e, context)
    raise mse

这种方法通过在捕获MySpecialException时维护原始stacktrace改进了已接受的答案,因此当顶级异常处理程序记录异常时,您将得到一个指向原始异常抛出位置的回溯。

答案是做一个简单的raise

try:
    ...
except NoChildException:
    # optionally, do some stuff here and then ...
    raise
except Exception:
    # handling

这将重新引发最后一个抛出的异常,原始堆栈跟踪保持完整(即使已处理)。

相关问题 更多 >

    热门问题