python - 如何构建指向已保存的 python 回溯的异常?
问题描述
我正在尝试做一些有点奇怪的事情。我想在 Python 中保存堆栈跟踪,然后当我在后面的某行抛出异常时,我希望该异常具有我之前保存的堆栈跟踪,而不是默认的回溯。我试图给人一种错觉,即错误是从不同的行引发的,而不是实际引发的错误。
为了使这一点更具体,我希望能够做类似的事情
class Pipeline:
def __init__(self):
saved_traceback = None
def m1(self):
# ... Do some work ....
saved_traceback = save_traceback()
def execute(self):
try:
# .... Do Some work
except Exception as e:
raise SpecialError(saved_traceback)
然后我会运行一个脚本,如:
foo = Pipeline()
foo.m1()
foo.execute()
而且我想以execute
这样一种方式实现,如果在执行过程中出现错误,则回溯会指向对m1
. 这是一种惰性管道构建领域特定语言的一部分,在您调用之前不会发生任何工作execute
,因此所有错误消息都会来自execute
。相反,我希望用户看到指向添加错误管道步骤的方法的错误。
解决方案
您可以使用traceback.format_exc()
将回溯保存为字符串。
import traceback
try:
print(a)
except:
traceback_str = traceback.format_exc()
print(a)
将失败,NameError
因为a
从未定义。在except
块中,最近的回溯将保存traceback_str
为字符串。
推荐阅读
- selenium - 如何在 Appium 中下载 android 设备
- javascript - 无法在angularjs中使用pdf.js查看数字签名的pdf文件
- python - Python for循环错误`TypeError:只能将元组(不是“str”)连接到元组`
- java - Java 中的 mTLS X509 认证请求
- swift - 如何像 kotlin 一样精简以下 swift 代码?
- javascript - Dialogflow 添加动态文本不适用于 Promise 和异步功能
- typescript - PrimeNG DataTable 用骨架效果代替加载圆
- azure-devops - 组织列表为空 Azure DevOps
- javascript - 强制视频在低功耗模式 IOS 下播放 - 可能/解决方法?
- export-to-csv - 如何将睡眠 edf 数据转换为 .csv 并从 psg 信号中提取有意义的特征