【发布时间】:2023-03-19 13:16:02
【问题描述】:
当我在我的 Python 库中引发我自己的异常时,异常堆栈将引发行本身显示为堆栈的最后一项。这显然不是错误,在概念上是正确的,但是当您在外部使用代码(例如作为模块)时,将重点放在对调试无用的东西上。
有没有办法避免这种情况并强制 Python 将上一个到最后一个堆栈项显示为最后一个,就像标准 Python 库一样。
【问题讨论】:
-
从编译的 C 代码中引发的 raise 行是隐藏的(因为没有要显示的 raise 行)。标准库的 Python 部分仍将在回溯中显示 raise 语句。
-
也许你可以破解
sys.excepthook以排除最后一行,如果它是raise。但一般是不可能的,习惯就好了。 -
你总是可以提出一个有用的异常。
-
这太可怕了——当然你希望能够看到异常来自哪里!没有什么说异常最有趣的帧是它生成的正上方,异常的本质是堆栈跟踪的重要部分可能在它的任何地方,从生成它的代码块一直到起来。
-
对于那些说这是一个糟糕想法的人,我会将上述情况与本机 python 函数引发的异常进行比较。它们将异常显示为来自错误使用函数的行,而不是该函数中引发异常的行。我不认为在这种情况下这是一个坏主意,因为您可以相信错误不是来自函数本身的问题,因为它已经过 python 开发人员的严格测试。为什么不在这里?
标签: python exception stack raise