python - 在 Python 中包装异常

标签 python exception

我正在开发一个邮件发送库,我希望能够捕获发件人(SMTP、Google AppEngine 等)产生的异常,并将它们包装在特定于我的库的易于捕获的异常中(ConnectionError、 MessageSendError 等),原始回溯完好无损,因此可以对其进行调试。在 Python 2 中执行此操作的最佳方法是什么?

最佳答案

最简单的方法是使用旧的跟踪对象重新引发。以下示例显示了这一点:

import sys

def a():
    def b():
        raise AssertionError("1")
    b()

try:
    a()
except AssertionError: # some specific exception you want to wrap
    trace = sys.exc_info()[2]
    raise Exception("error description"), None, trace

查看 raise statement 的文档三个参数的详细信息。我的示例将打印:

Traceback (most recent call last):
  File "C:\...\test.py", line 9, in <module>
    a()
  File "C:\...\test.py", line 6, in a
    b()
  File "C:\...\test.py", line 5, in b
    raise AssertionError("1")
Exception: error description

为了完整起见,在 Python 3 中,您将使用 raise MyException(...) from e syntax .

关于python - 在 Python 中包装异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3847503/

相关文章:

python - 在 tensorflow 中使用自定义操作构建图

python - 如何以不同的对齐方式将QLabels添加到QTableWidget中

ios - 未捕获的异常'NSInvalidArgumentException'问题,原因:'***-[__ NSArrayM insertObject:atIndex:]:对象不能为nil

objective-c - Cocoa 异常策略背后的基本原理是什么——或者为什么只对程序员错误使用异常?

C++ 自定义异常

python - Tkinter 类方法和访问类成员

python - 如果结束标记为 <\\/p>,如何获取 <p> 内的值列表

python - 直接从 typing.NamedTuple 继承时出现奇怪的 MRO 结果

c# - 未捕获异常

java - 这个异常是什么意思?