我正在开发一个邮件发送库,我希望能够捕获发件人(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/