I am working on a python program which interacts with many external libraries and has some fairly complex logic. In this program I've found that it'll sometimes print NoneType: None
to the console (with no context) whatsoever. I have no idea where this is being printed or why and this is causing errors in other places of the program.
So is it possible to find the source of a print/warn call?
答案 0 :(得分:0)
您始终可以覆盖内置print()
功能,然后观察正在发生的事情,例如:
import builtins
import inspect
builtin_print = builtins.print # store a reference to the built-in print() function
def tracing_print(*args, **kwargs):
c = inspect.getouterframes(inspect.currentframe())[1] # get the calling frame
# print the caller info (you can add a condition like `if args and args[0] is None`):
builtin_print("{}, line {}, caller `{}`, source: {}".format(c[1], c[2], c[3], c[4]))
builtin_print(*args, **kwargs) # call the built-in method and forward the params
builtins.print = tracing_print # override the built-in print
在每次拨打print()
之前,这会给你很多信息。例如:
def foo():
print("Bar!")
foo()
会产生类似的东西:
/tmp/playground/test.py, line 13, caller `foo`, source: [' print("Bar!")\n'] Bar!
毋庸置疑,不要在生产代码中使用它,它适用于取证。