今天给大家介绍一个python相关的调试工具 peek 。
在 Python 开发中,调试是一个常见且重要的环节。除了断点调试以外,有时候本地开发图简单,经常会直接就是通过print或者log来输出变量值进行调试。
比如这样一段代码是很常见的:
import time
def debug_example():
# 开始时间
start_time = time.time()
print("开始调试...")
# 示例变量
a = {1, 2, 3, 4, 5}
print("变量 a 的值:", a) # 打印变量值
# 模拟一些操作
time.sleep(1) # 暂停 1 秒
# 打印当前时间
current_time = time.time() - start_time
print("当前时间:", current_time, "秒") # 打印执行时间
# 打印分割线
print("-" * 30)
# 继续其他操作
a.remove(4)
print("更新后的变量 a 的值:", a) # 打印更新后的变量值
# 打印当前时间
current_time = time.time() - start_time
print("当前时间:", current_time, "秒") # 打印执行时间
# 打印分割线
print("-" * 30)
debug_example()
输出结果是这样的
开始调试...
变量 a 的值: {1, 2, 3, 4, 5}
当前时间: 1.0011329650878906 秒
------------------------------
更新后的变量 a 的值: {1, 2, 3, 5}
当前时间: 1.001204490661621 秒
------------------------------
如果用peek的话:
import time
from peek import p
p.configure(enabled=True,show_enter=True, show_line_number=True, show_time=True, show_delta=True, show_exit=True)
@p()
def debug_example():
# 示例变量
a = {1, 2, 3, 4, 5}
p("变量 a 的值:", a) # 打印变量值
# 模拟一些操作
time.sleep(1) # 暂停 1 秒
p()
# 继续其他操作
a.remove(4)
p("更新后的变量 a 的值:", a)
p()
debug_example()
输出结果是这样的
#7 @ 14:50:27.626882 delta=0.003 ==> called debug_example()
#10 in debug_example() @ 14:50:27.627705 delta=0.004 ==>
'变量 a 的值:'
a={1, 2, 3, 4, 5}
#15 in debug_example() @ 14:50:28.634658 delta=1.011
#19 in debug_example() @ 14:50:28.636275 delta=1.012 ==>
'更新后的变量 a 的值:'
a={1, 2, 3, 5}
#20 in debug_example() @ 14:50:28.638626 delta=1.014
#7 @ 14:50:28.638778 delta=1.015 ==> returned None from debug_example() in 1.011896 seconds
可以看到,通过 peek 库,可以更方便地调试和查看变量的状态,提供了更丰富的调试信息(如行号、时间等),也不需要再手动计算当前时间,执行时间,是不是很方便~
另外,在生产环境如果不需要日志输出的时候,可以在configure里面传入enabled=False就可以禁用掉了。
输出到日志文件
import logging
from peek import p
logging.basicConfig(level="INFO", filename='app.log', filemode='a',
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
log = logging.getLogger("demo")
p.configure(output=log.info)
安装
pip install peek-python
配置项
以下是对 peek 库中各个配置项的详细解释:
Limitations
It is not possible to use peek:
from a frozen application (e.g. packaged with PyInstaller)
when the underlying source code has changed during execution
peek在这两种情况下是无法正常使用的:
从冻结的应用程序中使用:当你使用像 PyInstaller 这样的工具将 Python 应用程序打包成可执行文件时,生成的应用程序被称为“冻结应用程序”。在这种情况下,peek 可能无法正常工作,因为它依赖于动态加载和反射等特性,而这些特性在冻结的环境中可能受到限制。
当底层源代码在执行期间发生变化:如果在程序运行时,源代码被修改(例如,使用了热重载或动态代码生成),peek 可能无法正确跟踪和显示变量的状态。这是因为 peek 依赖于在执行时获取的源代码信息,如果这些信息发生变化,peek 可能无法提供准确的调试信息。
到这,本篇已经完结,也欢迎大家在评论区留言,分享你对日常开发时候调试的一些经验和看法~