我正在尝试更改 python 的 print 内置函数。我试图实现此目的的原因是因为我的应用程序有一个详细的 sys.argv,并且我想使用 print 来控制台输出消息,无论详细信息是 True 还是 False。我尝试使用创建新函数,但出现递归错误:>>> import builtins>>> def new_print(*args, **kwargs):... print('print:', *args, **kwargs)... >>> old_print = builtins.print>>> old_print(1)1>>> builtins.print = new_print>>> print(1)Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in new_print File "<stdin>", line 2, in new_print File "<stdin>", line 2, in new_print [Previous line repeated 996 more times]RecursionError: maximum recursion depth exceeded我尝试过使用 sys.stdout():>>> import builtins>>> import sys>>> def new_print(*args, **kwargs):... sys.stdout(*args, **kwargs)... >>> old_print = builtins.print>>> old_print(1)1>>> builtins.print = new_print>>> print(1... )Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in new_printTypeError: '_io.TextIOWrapper' object is not callable尽管使用了这些选项,但似乎没有一个能正常工作。我需要所有模块文件都可以访问新的打印功能,而无需每次都导入它。这就是为什么我尝试更改内置函数,但我不确定在init .py 文件中更改此函数是否会对我的其他文件产生影响。拜托,如果您有任何可以帮助我的想法,请留在下面。
1 回答
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
你几乎已经拥有了。调用old_print你的新函数:
def new_print(*args, **kwargs):
old_print('print:', *args, **kwargs)
old_print = print
print = new_print
添加回答
举报
0/150
提交
取消