飞道的博客

使用Icecream提高Python调试效率

459人阅读  评论(0)

欢迎关注 “小白玩转Python”,发现更多 “有趣”

动机

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

例如运行下面的程序


   
  1. num1 = 30
  2. num2 = 40
  3. print(num1)
  4. print(num2)

输出结果如下


   
  1. 30
  2. 40

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

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


   
  1. num1 = 30
  2. num2 = 40
  3. print( 'num1', num1)
  4. print( 'num2', num2)

   
  1. num1 30
  2. num2 40

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

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


   
  1. num1 = 30
  2. num2 = 40
  3. ic(num1)
  4. ic(num2)

   
  1. ic | num1: 30
  2. ic| num2: 40

什么是冰淇淋?

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

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

$ pip install icecream

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


   
  1. from icecream import ic
  2. def plus_five(num):
  3. return num + 5
  4. ic(plus_five( 4))
  5. ic(plus_five( 5))

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

检查执行情况

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


   
  1. def hello(user:bool):
  2. if user:
  3. print( "I'm user")
  4. else:
  5. print( "I'm not user")
  6. hello(user= True)

   
  1. I 'm user

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


   
  1. from icecream import ic
  2. def hello(user:bool):
  3. if user:
  4. ic()
  5. else:
  6. ic()
  7. hello(user= True)

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

自定义前缀

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


   
  1. from datetime import datetime
  2. from icecream import ic
  3. import time
  4. from datetime import datetime
  5. def time_format():
  6. return f'{datetime.now()}|> '
  7. ic.configureOutput(prefix=time_format)
  8. for _ in range( 3):
  9. time.sleep( 1)
  10. ic( 'Hello')

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

获得更多的上下文信息

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


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

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

总结

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

·  END  ·

HAPPY LIFE


转载:https://blog.csdn.net/weixin_38739735/article/details/112793053
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场