【发布时间】:2019-11-29 00:00:52
【问题描述】:
我想通过捕获异常并发出警告来处理某些异常。当显示警告时(例如,在 stderr 或日志文件中,我使用日志记录模块)我希望它显示警告的堆栈跟踪,然后显示“由”加上原始异常的堆栈跟踪。
如果我要引发另一个异常,我会使用 from 关键字(假设 XException、YException 是从 Exception 派生的自定义异常类,而 YWarning 是从 Warning 类派生的):
def do_x():
riase XException("Failed to do X")
def do_y():
try:
# do other things
do_x()
# maybe do some more things
except XException as x_exc:
raise YException("Failed to do Y") from x_exc
但就我而言,如果做 X 失败,这没什么大不了的,我可以继续做 Y。不过我想发出警告。
from warnings import warn
def do_x():
raise XException("Failed to do X")
def do_y():
try:
# do other things
do_x() # if this fails, we can live with it
except XException as x_exc:
warn(YWarning("Things went not so smooth with doing Y", cause=x_exc))
这里我编写了cause= 可选参数,所以我想知道如何实例化任何Exception 子类(包括Warning 及其子类)并指定原因。
【问题讨论】:
标签: python-3.x exception warnings