Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种优雅的方法可以将打印的语句跟踪到打印它的代码行?_Python_Python 3.x - Fatal编程技术网

Python 有没有一种优雅的方法可以将打印的语句跟踪到打印它的代码行?

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

我想要一种快速识别打印行的方法。 例如,在JS中有一个console.trace(),它可以方便地指示打印的来源

我知道我可以打印回溯,但它对于任务来说太大了,使得跟踪代码执行几乎不可能。 我需要一种打印时不会占用太多空间的东西,它可以为我指出打印输出的正确行。

使用,您可以尝试以下方法:

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