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

标签 python python-3.x exception overriding gtk3

我正在调试一个巨大的遗留代码库,实际上是将其从 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/

相关文章:

python - 如何在字典中添加字典

android - 如何在不同的线程上运行不同的进程并将输出输出到第一个线程? Python

python - 如何避免从 PyPI 更新包?

python - 如何在 Python 中打开和呈现原始二进制数据?

python - 如何显示关联的表单字段?

java - DecimalFormat 和阿拉伯语区域设置

gwt - 如何在 GWT RPC 中将异常从服务器端传递到客户端

python - 从函数和前缀字符串在 Django 中创建默认 ID

python - 有没有办法检查 Discord 上的 message.content 是否包含文件?

c# - 为什么在 "try"或 "catch"或 "finally"的范围内声明的变量没有?