Python 有没有一种优雅的方法可以将打印的语句跟踪到打印它的代码行?
我想要一种快速识别打印行的方法。 例如,在JS中有一个console.trace(),它可以方便地指示打印的来源 我知道我可以打印回溯,但它对于任务来说太大了,使得跟踪代码执行几乎不可能。 我需要一种打印时不会占用太多空间的东西,它可以为我指出打印输出的正确行。使用,您可以尝试以下方法:Python 有没有一种优雅的方法可以将打印的语句跟踪到打印它的代码行?,python,python-3.x,Python,Python 3.x,我想要一种快速识别打印行的方法。 例如,在JS中有一个console.trace(),它可以方便地指示打印的来源 我知道我可以打印回溯,但它对于任务来说太大了,使得跟踪代码执行几乎不可能。 我需要一种打印时不会占用太多空间的东西,它可以为我指出打印输出的正确行。使用,您可以尝试以下方法: import logging logging.basicConfig(level=logging.DEBUG, format=("line %(lineno)d: %(message)s")) def pr
import logging
logging.basicConfig(level=logging.DEBUG, format=("line %(lineno)d: %(message)s"))
def print_line(strg):
logging.debug(strg)
if __name__ == "__main__":
print_line("test")
哪个输出
line 18: test
如果这会干扰日志记录的其余部分,您还可以创建并配置一个专用记录器(可能有更好的方法)
使用@hiroprotation所示的日志模块可能是一个不错的选择,但是因为您提到您已经大量使用了日志,您可能希望使用
inspect
模块
此示例将打印执行DEBUG
下的print语句的函数;也许这就足够满足你的需要了
DEBUG = True
if DEBUG:
import inspect
def _print(s):
print(f'now in: {inspect.stack()[1][3]} -> {s}')
def current_function():
if DEBUG:
_print('debug stuff')
print('doing stuff')
def main():
current_function()
if __name__ == '__main__':
main()
输出:
正在打印什么?你不能在你的代码中复制和搜索它吗?你考虑过使用
日志记录
模块吗…?你能举一个例子说明你实际上想要实现什么,以及你迄今为止所尝试的是如何不起作用的吗?你认为你会使用一个专用的日志记录程序,但你接受了没有日志记录程序的答案吗?这太好笑了!哦这似乎有点简单!哈哈,谢谢@hiroprogator-我更喜欢你的日志记录方法,但有时候,简单的方法也不错!我认为一个装饰师也会工作得很好;我自己的答案中的建议是有效的,但可能更适合快速和肮脏的项目。
DEBUG = True
if DEBUG:
import inspect
def _print(s):
print(f'now in: {inspect.stack()[1][3]} -> {s}')
def current_function():
if DEBUG:
_print('debug stuff')
print('doing stuff')
def main():
current_function()
if __name__ == '__main__':
main()
now in: current_function -> debug stuff
doing stuff