使用Icecream提高Python调试效率

共 2130字,需浏览 5分钟

 ·

2021-01-19 01:34


点击上方AI算法与图像处理”,选择加"星标"或“置顶

重磅干货,第一时间送达

动机


使用print来调试代码,你会发现查看终端上的许多行输出,然后试图找出每个输出属于哪些代码,这是一个非常繁琐的过程。


例如运行下面的程序

num1 = 30num2 = 40 
print(num1)print(num2)

输出结果如下

3040

这些输出中哪一个是num1?这些输出中哪一个是num2?两个输出可能不是那么糟糕,但是如果有超过5个不同的输出呢?试图找到负责输出的源代码可能会非常耗时。


当然,可以尝试在print语句中添加文本来进行标记,以便更容易地理解:

num1 = 30num2 = 40 
print('num1', num1)print('num2', num2)

num1 30num2 40

但同样,输出文本也会非常耗时。是否有一种方法可以打印负责输出的代码,而不需要输出额外的文本呢?


这就是冰淇淋派上用场的时候了!

num1 = 30num2 = 40 
ic(num1)ic(num2)
ic| num1: 30ic| num2: 40

什么是冰淇淋?


Icecream是一个Python库,可通过最少的代码使打印调试更具可读性。


使用下面的代码安装冰淇淋

$ pip install icecream

让我们通过打印Python函数的输出来进行尝试。

from icecream import ic 
def plus_five(num): return num + 5
ic(plus_five(4))ic(plus_five(5))

通过使用ic,我们不仅可以看到输出,还可以看到函数及其参数!多么方便!终端中的颜色也将与上面显示的输出一样多彩。


检查执行情况


要查找代码执行的位置,可以执行下面所示的操作,以查找执行的语句。

def hello(user:bool):    if user:        print("I'm user")    else:        print("I'm not user")
hello(user=True)
I'm user

通过运行ic()而不需要额外的文本,Icecream可以让您更容易地完成上面的工作。

from icecream import ic 
def hello(user:bool): if user: ic() else: ic()
hello(user=True)

现在就可以知道函数hello中的第5行的代码已执行,而第7行的代码未执行。


自定义前缀


如果想要插入一个自定义前缀,例如对print语句执行代码的时间,那么icecream也允许这样做。

from datetime import datetimefrom icecream import ic import timefrom datetime import datetime
def time_format(): return f'{datetime.now()}|> '
ic.configureOutput(prefix=time_format)
for _ in range(3): time.sleep(1) ic('Hello')

现在代码执行的时间会自动显示在输出中!是不是超酷的!


获得更多的上下文信息


除了了解负责输出的代码之外,你可能还想知道代码执行的行和文件来自哪个行。要了解代码的上下文,只需要将includeecontext = True添加到ic.configureOutput ()中即可。

from icecream import ic 
def plus_five(num): return num + 5
ic.configureOutput(includeContext=True)ic(plus_five(4))ic(plus_five(5))

现在就可以知道第一个输出是由icecream_example.py文件中的第7行的plus_five函数执行的。


总结


现在我们已经学会了如何使用icecream使打印更具可读性。Icecream是一个很好的调试工具,希望你也会发现它的高效。


·  END  ·


HAPPY LIFE

下载1:何恺明顶会分享


AI算法与图像处理」公众号后台回复:何恺明,即可下载。总共有6份PDF,涉及 ResNet、Mask RCNN等经典工作的总结分析


下载2:终身受益的编程指南:Google编程风格指南


AI算法与图像处理」公众号后台回复:c++,即可下载。历经十年考验,最权威的编程规范!



下载3 CVPR2020

AI算法与图像处公众号后台回复:CVPR2020即可下载1467篇CVPR 2020论文
个人微信(如果没有备注不拉群!
请注明:地区+学校/企业+研究方向+昵称


觉得不错就点亮在看吧

浏览 35
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报