记录变量名称和值

Sea*_*ean 8 python variables logging

我正在寻找一种快速打印变量名称和值的方法,同时在unix命令行/ ssh会话上快速开发/调试一个小的python脚本.

这似乎是一个非常普遍的要求,在打印或记录其值的每一行上复制variable_names似乎是浪费(在击键和时间/能量上).即而不是

print 'my_variable_name:', my_variable_name
Run Code Online (Sandbox Code Playgroud)

我希望能够为str,int,list,dict执行以下操作

log(my_variable_name)
log(i)
log(my_string)
log(my_list)
Run Code Online (Sandbox Code Playgroud)

并获得以下输出

my_variable_name:some string
i:10
my_string:a string of words
my_list:[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

理想情况下,输出也会记录函数名称

我已经看到一些尝试使用本地,全局,框架等的解决方案,但我还没有看到一些适用于整数,字符串,列表和函数内部的东西.

谢谢

小智 13

从 Python 3.8 开始,在带有格式化 f 字符串的变量后面使用“=”符号可以实现此目的。例如:

import pathlib as pl
import logging

logging.basicConfig(level=logging.DEBUG)

data_root = pl.Path("D:\Code_Data_Dev\Data\CSV_Workspace_Data")

logging.debug(f'{data_root=}')
Run Code Online (Sandbox Code Playgroud)

这输出

DEBUG:root:data_root=WindowsPath('D:/Code_Data_Dev/Data/CSV_Workspace_Data')
Run Code Online (Sandbox Code Playgroud)

  • 从 python 3.8 开始可用:https://docs.python.org/3/reference/lexical_analysis.html#f-strings (3认同)

Leo*_*o.Z 7

如果您需要的工具仅用于开发和调试,那么有一个有用的包calle q.

它已经提交给pypi,它可以安装 pip install q或easy_install q.

import q; q(foo)

# use @q to trace a function's arguments and return value
@q
def bar():
   ...

# to start an interactive console at any point in your code:
q.d()
Run Code Online (Sandbox Code Playgroud)

默认情况下,结果将输出到文件/ tmp/q(或任何自定义路径),因此它们不会与stdout和普通日志混合使用.你可以检查输出tail -f /tmp/q.输出以不同颜色突出显示.

作者在2013年的PyconUS闪电话中介绍了他的图书馆.视频在这里,从25:15 开始.