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)
如果您需要的工具仅用于开发和调试,那么有一个有用的包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 开始.