调试Python代码,不要再用Print了!

Vision-Language Navigation - Windows环境下编译安装Matterport3D Simulator仿真器(三) 目录1 编译 Matterport3D Simulator 源码1.1 源码下载1.2 编译 1 编译 Matterport3D Simulator 源码   在 Windows 下编译 Matterport3D Simulator 稍微有些不方便,需要对 CMakeLists.txt 进行一些修改,如果有更好的方法欢迎大家评论。 1.1 源码下载   还是直接在 Github 上搜索 Matterport3D Simulator 的 repo,下载源码。如果用 zip 方式,那么直接在下即可。如果使用 阅读详情

相信大部分人学习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 + 5

ic(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 datetime

def 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 + 5

ic.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 ic

def plus_five(num):
    return num + 5

ic.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

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




菜鸟编程大本营,现已正式上线!

接下来我们将会在该公众号上,专注为大家分享Python,Java,Go,前端开发等优质的学习资源和技术,分享一些程序员圈的新鲜趣事。爆款文案“裂开了,苦涩了,翻白眼”!我用Python画出微信新出的表情包
吃瓜群众,我用五行Python代码让微博热点动起来!抖音创始人张一鸣:10 年面试 2000 人,我发现混的好的人,全都有同一个特质
卧槽!没想到,用Python竟能做五仁月饼
Python 初学者进阶的九大技能
终于,Flask 迎来了真正的对手!
7个最佳的学习Python编程的开源库3287亿!我用20行Python代码预测双十一成交额,猜中送红包哦
关注菜鸟编程本营,从菜鸟进阶高手
点这里,获取新手福利
NSGA-Ⅱ算法:从原理到实战,解锁多目标优化难题 本文深入解析NSGA-Ⅱ算法在多目标优化中的应用,从原理到实战全面覆盖。通过快速非支配排序、精英策略和拥挤度比较三大创新,NSGA-Ⅱ有效解决了传统算法的效率与多样性问题。结合工业案例展示其在注塑工艺优化中的显著效果,为工程师提供实用解决方案。 阅读详情

相关推荐

ZYNQ平台上基于PHY芯片的IEEE1588/PTP高效实现方案

本文详细解析了在Xilinx ZYNQ平台上,如何通过选用支持IEEE1588/PTP的专用PHY芯片(如RTL8211FS-VS-CG、DP83640)来实现高精度时间同步的高效方案。文章对比了PS端与PL端MAC连接的优劣,提供了从硬件选型、接口设计、Linux驱动适配到PTP协议栈配置与性能优化的完整实战指南,并总结了关键避坑经验,为工业网络、电力系统等需要纳秒级同步的应用提供了清晰、可靠的实施路径。

kkk56的博客 1091

调试 Python 代码,不要再用 Print 了

相信大部分人学习Python,肯定会用print()这个内置函数,来调试代码的。那么在一个大型的项目中,如果你也是使用print来调试你的Python代码,你就会发现你的终端有多个...

SeizeeveryDay的博客 1009

CMOS的宽/长比、传输门与三态门、锁存器与触发器、简单版图、竞争与冒险

目录 1.CMOS的宽长比 2.传输门与三态门 传输门 三态门 3.锁存器与触发器 3.1RS锁存器[3] 3.2D锁存器 3.3D触发器 4.简单CMOS器件的版图 5.竞争与冒险 1.CMOS的宽长比 关于COMS原理及结构图可以参考[1]COMS原理及门电路设计. 栅在源漏方向的长度称作栅的长L,垂直方向称为栅的宽W,如图1中NMOS的版图。 图1 以MOS管...

king阿金 1万+

不要再使用Print在Python中进行调试了,Ice Cream 来了!

Python 中最常用的函数是什么?可能在大多数编程语言中,它一定是 print() 函数。我相信大多数像我这样的开发人员会在开发过程中多次使用它将消息打印到控制台中。 当然,目前没有其他方法可以完全替代 print()函数。然而,当我们想要输出一些东西用于调试时,肯定有更好的方法。在本文中,我将介绍一个非常有趣的 Python 第三方库,名为“Ice Cream”,它可以为快速简单的调试创造许多便利。有所收获,点赞支持一下。 一个糟糕例子 让我们从一个相对糟糕的例子开始。假设我们已经定义了一个函数,我们想

Python学习与数据挖掘 2321

腾讯、飞书等在线表格自动化编辑--python

在线文档自动化处理数据

qq_32828053的博客 2万+

告别Visual Studio!用MSYS2+GCC+CMake在Windows上打造Linux式C++开发环境(保姆级避坑)

本文详细介绍了如何在Windows上使用MSYS2+GCC+CMake搭建Linux式C++开发环境,替代Visual Studio。从MSYS2的安装配置、MinGW-w64 GCC工具链的部署,到CMake项目的创建与构建,提供了保姆级教程和常见问题解决方案,帮助开发者高效过渡到命令行开发模式。

weixin_30298497的博客 325

用 pprint 代替 print 更友好的打印调试信息

pprint 是 “pretty printer” 的简写,“pretty” 的含义是 “漂亮的、美观的”,因此 pprint 的含义便是:漂亮的打印。默认的行宽度参数为 80,当打印的字符小于 80 时,pprint() 基本上等同于内置函数 print(),当字符超出时,它会作美化,进行格式化输出。简单的说,pprint() 是 print() 的轻量级替代,简单实用,而且它也是 Python 标准库的一员。这是个相当简单却有用的模块,主要用于打印复杂的数据结构对象,例如多层嵌套的列表、元组和字典等。

关注我!带你一路 "狂飙" 到底! 481

数据库课程案例——电力公司收费管理系统分析与实践,完整带SQL语句

某电力公司收费管理信息系统实现客户信息、用电类型(类别号、类别名、电价)及业务员管理;实现客户用电信息管理(客户号、月份、用电类别号、用电度数);实现客户费用管理(客户号、月份、费用、收费标志),收费标志的默认值为“未收”;实现收费登记(客户、月份、应收费用、实收费用、业务员),并自动修改收费标志(用触发器实现);创建触发器,实现收费时自动更加应收费用和实收费用,计算本次结余,然后修改客户信息表中的结余金额;创建存储过程统计指定月份应收费用和实收费用;创建存储过程查询指定月份未交费的用户信息,以便崔费;创建

qq_44242804的博客 2762

1304: 【入门】冷饮的价格(2)

小明夏天去买冰棍,老板说买30个及以上1元/个, 20~29个1.2元/个,10~19个1.5元/个,10个以下1.8元/个!请从键盘读入小明买冰棍的数量,计算小明应该付的价格(价格保留1位小数)!一个整数n代表小明购买的冰棍的数量。这样我们就可以得到以下代码。我们首先先要明确考点是分支。

ycyj060910的博客 2857

MTK AWB 色温曲线的进一步猜想

平均距离来判断是否对该色温下白平衡进行全部收白处理,还是保留一些光源的本身的颜色。比如占据图像一大半左右的纯色背景,纵坐标值相对横坐标的距离应该会比较大,大于一般场景下的正常白点分布。反之,位于Plank_curve下方位置的点具有偏洋红色的倾向。此时拟合各个色温下的白点,拟合曲线大致是以X= 0.85)平行于横轴的一条直线。对原始坐标系中的点取对数后的Log坐标系空间。此时拟合各个色温下的白点,拟合曲线大致呈现的是一条直线。,可以认为是各种色温下白点分布所呈现的走向。的算法利用某个色温点的偏离。

大熊 722

ESP32-C3入门教程 WiFi篇①——WiFi Scan 扫描附近AP无线热点 | 堵塞等待扫描结果,回调事件通知扫描结果

文章目录一、快速运行二、运行效果三、程序流畅四、关键函数4.1 扫描所有有效的AP4.2 获取上次扫描中找到的AP列表4.3 获取上次扫描中找到的AP数 一、快速运行 示例项目中,选择WiFi—>scan menuconfig配置ESP32C3-Specific—>Rec 0 芯片选择ESP32-C3(Built-in USB JTAG) 快速运行ESP-IDF Build, Flash and Monitor(左下角) 二、运行效果 三、程序流畅 esp_netif_init,初始

5417

[瞎搞]python调试第三方库

读代码时边调试边看,可以提高速度,顺便偷懒。 想要调试阅读python第三方库,随手一查,找到了大佬使用PDB文章https://blog.youkuaiyun.com/ybdesire/article/details/54649211,试了一下,pdb这东西像极了gdb所以上手容易。但是不太适用于看代码的场景,因为在入库的时候需要打断点,但是跨文件的时候好像没法jump in(如果可以求告知!)。而且习惯了...

ccccmj的博客 1751

银行一表通监管报送系统详解

国家金融监管总局对于“一表通”的总体描述为:通过建立一套明细级、标准化的数据体系和汇总计算规则,将银行机构传送至监管可信区的业务明细数据汇总生成财务指标、监管指标和监管报表,大幅提升监管数据时效性,统一数据标准,实现数据间的穿透和整合,同时改变机构多头报送数据模式,减轻机构报送负担。

银行信息系统应用架构详解 2519

求求你调试Python代码,不要再用Print了!

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤苍苍竹林寺,杳杳钟声晚。相信大部分人学习Python,肯定会用print(...

pdcfighting的博客 198

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

print python怎么替代_调试Python代码,不要再用Print了!

相信大部分人学习Python,肯定会用print()这个内置函数,来调试代码的。那么在一个大型的项目中,如果你也是使用print来调试你的Python代码,你就会发现你的终端有多个输出。那么你便不得不去分辨,每一行的输出是哪些代码的运行结果。举个例子,运行下面这个程序。num1=30num2=40print(num1)print(num2)输出结果。3040这些输出中哪一个是num1?哪一...

weixin_39978257的博客 513

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

相信大部分人学习Python,肯定会用print()这个内置函数,来调试代码的。那么在一个大型的项目中,如果你也是使用print来调试你的Python代码,你就会发现你的终端有多个输出。那...

小詹学python的博客 174

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

python 如何边改代码边调试_调试 Python 代码,建议不要再用 Print 了!

大家好,我是安果!相信大部分人学习 Python,肯定会用 print() 这个内置函数,来调试代码的那么在一个大型的项目中,如果你也是使用 print 来调试你的 Python 代码,你就会发现你的终端有多个输出那么你便不得不去分辨,每一行的输出是哪些代码的运行结果举个例子,运行下面这个程序num1=30num2=40print(num1)print(num2)输出结果3040这些输出中...

weixin_28894541的博客 743

python之禅怎么print_调试Python代码,不要再用print了!

相信大部分人学习Python,肯定会用print()这个内置函数,来调试代码的。那么在一个大型的项目中,如果你也是使用print来调试你的Python代码,你就会发现你的终端有多个输出。那么你便不得不去分辨,每一行的输出是哪些代码的运行结果。举个例子,运行下面这个程序。num1=30num2=40print(num1)print(num2)输出结果。3040这些输出中哪一个是num1?哪一...

weixin_39535349的博客 124

python print用法 编码_调试 Python 代码,建议不要再用 Print 了!

大家好,我是安果!相信大部分人学习 Python,肯定会用 print() 这个内置函数,来调试代码的那么在一个大型的项目中,如果你也是使用 print 来调试你的 Python 代码,你就会发现你的终端有多个输出那么你便不得不去分辨,每一行的输出是哪些代码的运行结果举个例子,运行下面这个程序num1=30num2=40print(num1)print(num2)输出结果3040这些输出中...

weixin_29228203的博客 223

python输出调试信息_答应我,调试 Python 代码,不要再用 Print 了!

原标题:答应我,调试 Python 代码,不要再用 Print 了!相信大部分人学习 Python,肯定会用 print 这个内置函数,来调试代码的。那么在一个大型的项目中,如果你也是使用print来调试你的Python代码,你就会发现你的终端有多个输出。那么你便不得不去分辨,每一行的输出是哪些代码的运行结果。举个例子,运行下面这个程序。num1 = 30num2 = 40print(num1)p...

weixin_30293523的博客 449

无法支持python程序的编辑运行和调试_调试Python代码,不要再用Print了!

原标题:调试Python代码,不要再用Print了!相信大部分人学习Python,肯定会用print这个内置函数,来调试代码的。那么在一个大型的项目中,如果你也是使用print来调试你的Python代码,你就会发现你的终端有多个输出。那么你便不得不去分辨,每一行的输出是哪些代码的运行结果。举个例子,运行下面这个程序。num1 = 30num2 = 40print(num1)print(num2)输...

weixin_35779309的博客 921

答应我!忘了他吧!不要再用print了,以后调试Python用冰淇淋

调试python不要再用print()了,甜甜的冰激凌调试工具来了

信息安全领域优质创作者|操作系统领域专家 2万+
上一篇: 任意修改jupyter notebook默认 “文件存储路径”,本文太赞!
下一篇: 就在刚刚,百度重磅发布《深度学习中文教程实战版》,对外免费开发!
菜鸟学Python
博客等级 码龄9年 8063粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值