我正在调试一个巨大的遗留代码库,实际上是将其从 python2 移植到 python3。 不幸的是,有一些异常似乎已被处理和打印,但以前的开发人员不够明智,无法打印堆栈跟踪来告诉我到底在哪里触发了异常。
具体来说,我还将代码从 GTK+2 移植到 GTK+3,并且得到了许多这样的输出行:
TypeError: expose() missing 1 required positional argument: 'event'
此时,似乎剩下的唯一选择是全局劫持 print()
函数,以至少显示它在哪个模块中以及在哪一行被调用。
你知道这在 python3 中是否可能吗? (我是python2的老手,但python3的新手)
关于如何解决这个问题还有其他建议吗?
最佳答案
您可以将 sys.stdout
和 sys.stderr
重新映射到重写的文件类对象,每当有东西写入它时,检查当前是否处于异常状态框架,如果是,请重新引发异常。
import io
import sys
class Stream(io.StringIO):
def write(*args, **kwargs):
if sys.exc_info()[0] is not None:
raise
super().write(*args, **kwargs)
stream = Stream()
sys.stdout = stream
sys.stderr = stream
关于python - 是否可以全局覆盖 print() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37745043/