gpt4 book ai didi

python - 是否可以全局覆盖 print() ?

转载 作者:行者123 更新时间:2023-11-30 22:54:31 25 4
gpt4 key购买 nike

我正在调试一个巨大的遗留代码库,实际上是将其从 python2 移植到 python3。不幸的是,有一些异常似乎已被处理和打印,但以前的开发人员不够明智,无法打印堆栈跟踪来告诉我到底在哪里触发了异常。

具体来说,我还将代码从 GTK+2 移植到 GTK+3,并且得到了许多这样的输出行:

TypeError: expose() missing 1 required positional argument: 'event'

此时,似乎剩下的唯一选择是全局劫持 print() 函数,以至少显示它在哪个模块中以及在哪一行被调用。

你知道这在 python3 中是否可能吗? (我是python2的老手,但python3的新手)

关于如何解决这个问题还有其他建议吗?

最佳答案

您可以将 sys.stdoutsys.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com