我想要一种快速的方法来识别打印线。 例如,在JS中,有console.trace(),可以轻松指示打印的来源。
我知道我可以打印回溯,但是它对于任务来说太大了,并且使得几乎不可能执行代码执行。 我需要的东西在打印时不会占用太多空间,并且可以将我指向打印输出的正确行。
答案 0 :(得分:6)
使用logging
module,您可以尝试以下操作:
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
如果这会干扰其余的日志记录,您还可以创建和配置专用的记录器(可能会有更好的方法来实现此目的)
import logging
import sys
print_line_logger = logging.getLogger("print_line")
print_line_logger.setLevel(logging.DEBUG)
formatter = logging.Formatter("line %(lineno)d: %(message)s")
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(formatter)
print_line_logger.addHandler(handler)
def print_line(strg):
print_line_logger.debug(strg)
答案 1 :(得分:2)
使用@hiroprotagonist所示的日志记录模块可能是可行的方法,但是由于您提到您已经大量使用了日志记录,因此您可能希望使用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()
now in: current_function -> debug stuff
doing stuff