Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
python
Icecream
停止使用 Print 去调试你的 Python 代码!
发布于 2021-04-08 10:23:32 浏览:743
订阅该版
[tocm] # 停止使用 Print 去调试 Python 代码,请使用 Icecream 替代! 你是否使用 Print 或者 Log 去调试代码?使用 Icecream 来替代它们吧。 ![0_uTRIRERbf-Gg0UKN.jfif](https://oss-club.rt-thread.org/uploads/20210408/99f0fdaf3891b19fecd3041d9f6b433e.jfif) ## 原因 如果你使用 Print 去调试你的代码,你可能会感到困惑,通过查看终端上许多行的输出,然后试图找出每一行输出所属的代码行。 例如,运行下面的脚本 ```python num1 = 30 num2 = 40 print(num1) print(num2) ``` 你将得到下面的输出 ```python 30 40 ``` 它们中的哪个输出是 `num1`?哪个输出是 `num2`?两中输出可能不是那么难发现,但如果有超过 5 种不同的输出呢?试图找出相对应的源码可能会很长耗费时间。 你可以在 print 种添加文本使其更加容易理解: ```python num1 = 30 num2 = 40 print('num1', num1) print('num2', num2) ``` 运行代码,得到以下的输出: ```python num1 30 num2 40 ``` 这个输出更容易阅读,但同样,写输出文本是很费时间的。是否有一种打印代码的方式,是负责输出而不需要添加额外的文本,就像下面这样: ```python num1 = 30 num2 = 40 ic(num1) ic(num2) ``` 运行代码,得到以下的输出: ```python ic| num1: 30 ic| num2: 40 ``` 这时候 Icecream 就派上用场了。 ## 什么是 Icecream? Icecream 是一个 Python 库,它可以使用最少的代码使打印调试更具可读性。 安装 Icecream, 使用下面的方式: ```python pip install icecream ``` 让我们打印一个 Python 函数的输出来尝试一下 Icecream。 ```python from icecream import ic def plus_five(num): return num + 5 ic(plus_five(4)) ic(plus_five(5)) ``` 运行代码,得到以下的输出: ![image-20210408093123332.png](https://oss-club.rt-thread.org/uploads/20210408/e151dad0d6d7c97b3412a3ed4c290184.png) 通过使用 Icecream,我们不仅仅看到了输出,而且还看到了函数和函数的参数!如此方便!终端的颜色也和上面的输出一样丰富多彩。 ## 检查执行 为了定位代码执行的位置,你可以执行如下所示的操作来查找执行了哪条语句: ```python def hello(user:bool): if user: print("I'm user") else: print("I'm not user") hello(user=True) ``` 运行代码,得到以下的输出: ```python I'm user ``` Icecream 通过简单地运行 ic() 而不用附加文本,使你更容易执行上述操作;可以执行如下所示的操作来查找执行了哪条语句: ![image-20210408094007794.png](https://oss-club.rt-thread.org/uploads/20210408/c1723e8b0e3e2b0b5cc40515bd90c183.png) 运行代码,得到以下的输出: ![image-20210408093832540.png](https://oss-club.rt-thread.org/uploads/20210408/6f93b81753ccaa78d6d5a04fa49e5732.png) 现在,你知道在函数 hello 的第 6 行的代码被执行了,第 8 行的代码没有被执行。 ## 自定义前缀 如果你想在打印语句中插入一个自定义前缀,比如代码的执行时间, Icecream 也允许你这样做。 ```python from datetime import datetime from icecream import ic import time def time_format(): return f'{datetime.now()}|> ' ic.configureOutput(prefix=time_format) for _ in range(3): time.sleep(1) ic('Hello') ``` 运行代码,得到以下的输出: ![image-20210408094351800.png](https://oss-club.rt-thread.org/uploads/20210408/2bc51b1756cfe87953c258650a4a9a32.png) 现在,代码的执行时间将自动地显示在输出中,是不是很酷? ## 获取更多上下文 除了知道负责输出的代码之外,你可能还想知道代码是从哪行和哪个文件执行的。要想了解代码的上下文,请向 `ic.configureOutput()` 添加 `includeContext=True`: ```python from datetime import datetime from icecream import ic import time def time_format(): return f'{datetime.now()}|> ' ic.configureOutput(prefix=time_format, includeContext=True) for _ in range(3): time.sleep(1) ic('Hello') ``` 运行代码,得到以下的输出: ![image-20210408094922782.png](https://oss-club.rt-thread.org/uploads/20210408/6451ad4e5e73df87f97435b45322d8b3.png) 现在,你知道第一行输出是由 ice_test.py 文件中的 Hello 函数在 15 代码执行的。 ## 结论 恭喜你!你刚刚学习了如何使打印更具可读性通过使用 Icecream。对于我来说,Icecream 是一个很棒的调试工具,我也希望你能发现它很有用。 ## 文章转自 [Medium](https://towardsdatascience.com/stop-using-print-to-debug-in-python-use-icecream-instead-79e17b963fcc),如有侵权联系删除
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Papalymo
请勿打扰
文章
25
回答
85
被采纳
17
关注TA
发私信
相关文章
1
请问我使用scons --target=mdk5命令出现下问题怎么解决
2
Python库的线程锁,在第一次执行后退出再次执行,就会断言死机
3
env 下脚本怎么实现编译的时候产生汇编文件
4
如何在RT-Thread中调用python程序?
5
编译固件前先执行python脚本
6
env还没支持python3吗?
7
import keras2onnx错误
8
求助大家,windows在ENV一打开就显示python停止运行是怎么回事?
9
使用RTthread Studio导入MDK工程报错
10
env工具链什么时候支持python3y呀
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部