相信大部分人学习Python,肯定会用print()这个内置函数,来调试代码的。

那么在一个大型的项目中,如果你也是使用print来调试你的Python代码,你就会发现你的终端有多个输出。

那么你便不得不去分辨,每一行的输出是哪些代码的运行结果。

举个例子,运行下面这个程序。

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

输出结果。

30
40

这些输出中哪一个是num1?哪一个又是num2呢?

找出两个输出可能不是很困难,但是如果有五个以上的不同输出呢?尝试查找与输出相关的代码可能会很耗时。

当然你可以在打印语句中添加文本,使其更容易理解:

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

输出结果。

num1 30
num2 40

这个结果就很容易理解了,但是需要时间去写相关的信息。

这时就该「Icecream」上场了~

01. 什么是Icecream?

Icecream是一个Python第三方库,可通过最少的代码使打印调试更清晰明了。

使用pip安装Icecream库。

pip install icecream

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

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

输出结果如下。

ic| plus_five(4): 9
ic| plus_five(5): 10

通过使用icecream,我们不仅可以看到函数输出,还可以看到函数及其参数!

02. 检查执行情况

如果你想要找到执行代码的位置,可以通过执行如下所示的操作,来查找执行了哪个语句。

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

输出结果。

I'm user

使用icecream则无需多余的文本信息,就可以轻松地完成上述的操作。

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

输出结果如下。

ic| ice_1.py:5 in hello() at 02:34:41.391

从输出结果看,函数hello中的第5行的代码已被执行,而第7行的代码未执行。

03. 自定义前缀

如果您想在打印语句中插入自定义前缀(例如代码执行时间),icecream也是能实现的。

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

输出结果如下。

2021-01-24 10:38:23.509304|> 'Hello'
2021-01-24 10:38:24.545628|> 'Hello'
2021-01-24 10:38:25.550777|> 'Hello'

可以看到代码的执行时间,就显示在输出的前面。

04. 获取更多的信息

除了知道和输出相关的代码之外,你可能还想知道代码执行的行和代码文件。

在ic.configureOutput()中,设置includeecontext的参数值为True即可。

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

输出结果如下。

ic| ice_test.py:7 in <module>- plus_five(4): 9
ic| ice_test.py:8 in <module>- plus_five(5): 10

这里我们就知道了,第一个输出是由函数plus_five在文件icecream_example.py的第7行执行的。

第二个输出则是由函数plus_five在代码文件的第8行执行的。

上述两个操作都用到了ic.configureOutput()函数。

通过查看源码,可知有四个可供设置的参数。

  • prefix,自定义输出前缀

  • outputFunction,更改输出函数

  • argToStringFunction,自定义参数序列化字符串

  • includeContext,显示文件名、代码行、函数信息

05. 删除Icecream代码

最后你可以将icecream仅用于调试,而将print用于其他目的(例如漂亮的打印)。

from icecream import icdef plus_five(num):return num + 5ic.configureOutput(includeContext=True)
ic(plus_five(4))
ic(plus_five(5))for i in range(10):print(f'****** Training model {i} ******')

输出结果。

ic| ice_1.py:7 in <module>- plus_five(4): 9
ic| ice_1.py:8 in <module>- plus_five(5): 10
****** Training model 0 ******
****** Training model 1 ******
****** Training model 2 ******
****** Training model 3 ******
****** Training model 4 ******
****** Training model 5 ******
****** Training model 6 ******
****** Training model 7 ******
****** Training model 8 ******
****** Training model 9 ******

由于你可以区分调试打印和漂亮打印,因此搜索和删除所有ic调试语句非常容易。

删除所有调试代码后,你的Python代码就整洁了。

总结

到此,你就应该就学会了如何使用icecream去打印调试。

更多功能可以访问「GitHub」,了解详情~

https://github.com/gruns/icecream

万水千山总是情,点个 ???? 行不行

推荐阅读误执行了rm -fr /*之后,除了跑路还能怎么办?!
程序员必备58个网站汇总
大幅提高生产力:你需要了解的十大Jupyter Lab插件

答应我,调试Python代码,不要再用Print了!相关推荐

  1. pdb+ipdb 调试 Python代码

    pdb+ipdb 调试 Python代码 pdb 和 ipdb 的主要作用是用于 Python 程序的单步调试,Python 的调试可参考链接. ipdb exports functions to a ...

  2. 如何使用PyCharm调试Python代码

    by Ori Roza 通过Ori Roza 如何使用PyCharm调试Python代码 (How to use PyCharm to debug your Python code) Debuggin ...

  3. Eclipse中调试Python代码--调试FWTools2.4.7中的gdal_retile.py

    Eclipse中调试Python代码 Gdal_retile.py是用于对遥感影像创建金字塔,近期本人想读懂改程序中的代码.读懂代码的较好方式就是单步调试,但是由于之前没有学过Python语言,不但对 ...

  4. Python - 调试Python代码的方法

    调试(debug) 将可疑环节的变量逐步打印出来,从而检查哪里是否有错. 让程序一部分一部分地运行起来.从核心功能开始,写一点,运行一点,再修改一点. 利用工具,例如一些IDE中的调试功能,提高调试效 ...

  5. python手机编程调试_在Linux下调试Python代码的各种方法

    这是一个我用于调试或分析工具概述,不一定是完整全面,如果你知道更好的工具,请在评论处标记. 日志 是的,的确,不得不强调足够的日志记录对应用程序是多么的重要.您应该记录重要的东西,如果你的记录足够好的 ...

  6. 使用pycharm调试Python代码时F8快捷键失效

    一.问题现象 使用pycharm调试Python工程时,直接按F8,就是不移动,必须用鼠标去点击才能移动. 二.问题原因排查 由于在阅读文献,同时打开了有道词典,而网易有道词典的取词关开快捷键也是&q ...

  7. 调试python代码神奇ipdb

    1.背景 一个大的开源工程要看懂代码怎么办?调试吧. 自己写了一个package要调试吧,怎么吧 下载了一个开源包源码怎么学习代码? 一句话:调试代码 2.神器与安装 pip install ipdb ...

  8. 【华为云技术分享】使用pdb调试python代码的方法

    在有界面的操作系统上,可以使用pycharm进行pychon代码的调试,但是在只能使用terminal的Linux机器上怎么高效调试代码呢?答案就是使用pdb调试工具.初次使用pdb调试的同学,会觉得 ...

  9. python pdb查看变量值_使用Python中PDB模块中的命令来调试Python代码的教程

    你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇到上述境地的次数比你想要的还要多.然而,python中有一个整洁的调试特性(像其他大多数语言一样),在这种情况下使用非常方便 ...

最新文章

  1. 到今天了,今天又结束了
  2. python 微服务框架_Python微服务框架NameKo 性能体验
  3. Java程序设计学习笔记(四)—— GUI
  4. IDEA中的项目没有被SVN管理解决办法
  5. linux c 定时器
  6. C语言中能运算符重载吗,C++语言中什么运算符不能重载
  7. jzoj1768,P2704,POJ1185-[NOI2001]炮兵阵地【状态压缩dp】
  8. 不想横屏看视频?谷歌开源框架AutoFlip一键截出最精彩竖版视频
  9. Windows下调试hadoop
  10. GJB 8114-2013中不恰当的编码规则解析
  11. html5华文行楷字体代码,html5 支持的字体样式
  12. DPDK 20.11 meson build
  13. java简单的猜数字游戏
  14. Scipy总结(constants)
  15. Unity中的UI相关组件
  16. 如何解决苹果笔记本连接显示器显示不全的问题
  17. 1秒生成证件照——小米云证件照微信小程序
  18. 浅谈支付宝第三方支付
  19. java时间差的百分之二十,java计算时间差及某个时间段数据
  20. java 路由框架_使用Spring框架和AOP实现动态路由

热门文章

  1. linux服务器文件索引inodes满了
  2. Django2.2 pymysql 连接mysql数据库的坑
  3. 【附10】kibana创建新的index patterns
  4. 全面剖析支付宝服务窗功能二次开发
  5. Yii的查询后缀限定
  6. activiti mysql数据库表_Mysql安装activiti数据库的2种解决办法
  7. python c 混合编程 用c循环_混合编程:用 C 语言来扩展 Python 大法吧!
  8. 图标出问题_同是Office365,为什么你的软件图标还是旧版的?
  9. 基于matlab编译码器的设计,基于MATLAB循环码编译码仿真
  10. 【uniapp】组件封装与引用