你怎么还在用Print调试Python代码?

调试Python代码,不要再用Print了 相信大部分人学习Python,肯定会用print()这个内置函数,来调试代码的。 那么在一个大型的项目中,如果你也是使用print来调试你的Python代码,你就会发现你的终端有多个输出。 那么你便不得不去分辨,每一行的输出是哪些代码的运行结果。 举个例子,运行下面这个程序。 num1 = 30 num2 = 40 print(num1) print(num2) 输出结果。 30 40 这些输出中哪一个是num1?哪一个又是num2呢? 找出两个输出可能不是很困难,但是如果有五个以上 阅读详情

相信大部分人学习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」上场了~


很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:609616831


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去打印调试。

在这里还是要推荐下我自己建的Python学习群:609616831,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

【Python零基础入门系列】第9篇:Python 代码调试技巧(print调试、使用 IDE Debug) 调试(Debug)就是在程序出现问题时,通过一些方法找出程序出错的原因和位置,并进行修复的过程。语法错误(拼写、格式不对)逻辑错误(程序运行没报错,但结果不对)运行错误(比如除以 0、文件没找到等)调试就是把隐藏的 bug,揪出来、看清楚、修掉它。方法优点缺点print 调试简单、直接、适合新手复杂程序太乱,不易管理IDE Debug图形化、可视化、支持断点与查看变量需要熟悉 IDE 操作,稍微有门槛logging 方式灵活、适合开发阶段需要基础配置,不适合零基础快速调试。 阅读详情

相关推荐

再也不用Print函数调试啦--神级Python代码调试工具PySnooper的介绍和使用

PySnooper PySnooper是一款适合菜鸟用的代码调试工具。 如果Python代码哪儿输出不对劲了,之前一般都是利用print函数结合pdb.setTrace()来找问题,如果使用pysnooper的话,那事情就变得简单了! 你可以通过使用这个工具,清楚的看见每一行代码的执行结果以及所有的局部变量的值。只要在函数上添加一个装饰行(类似于装饰器的使用),就可以打印出该函数每一行执行的结果,...

zkyzq的博客 984

Python print语句详解及实例

本文详细介绍了Python中print语句的使用方法及实例。print语句是Python编程的基础,可以帮助我们在程序开发过程中更方便地调试和展示结果。文章首先介绍了print语句的基本语法及参数,然后通过多个实例演示了print语句的常见用法,如输出单个值、输出多个值、自定义分隔符、自定义结束符、输出到文件以及立即刷新输出等。接下来,文章介绍了格式化输出的方法,包括使用字符串拼接、%操作符、str.format()方法和f-string。最后,文章介绍了如何控制输出宽度和精度。

qq_54037316的博客 4005

Python中最简单不过的print语句讲解

名字:阿玥的小东东学习:Python、c++前面使用 print() 函数时,都只输出了一个变量,但实际上 print() 函数完全可以同时输出多个变量,而且它具有更多丰富的功能。

阿玥的小博客 6692

别再用 print 语句来调试代码了

本文转载自公众号:Python开发者(id:PythonCoder)调试 Python 代码的时候,你一般采用什么方法调?有些人用 PDB,有些用 IDE 自带的 Deb...

苏克的博客 1160

Qt OpenGL 3D 点云数据显示

在Qt中使用OpenGL显示3D点云数据是一个常见的需求,特别是在计算机视觉、机器人学和三维重建等领域。下面我将介绍一个基本的实现方案。

深之JohnChen的专栏 1238

Cadence IC618与Spectre231安装配置全攻略:License、环境变量与依赖检查

EDA工具部署中,License管理与环境变量隔离是核心难点。FlexLM作为通用授权机制,通过守护进程和端口配置实现工具授权;环境变量则控制工具路径与库加载顺序,避免版本冲突。合理配置可确保IC618与Spectre231稳定运行,提升仿真效率。典型应用场景包括模拟IC设计、高校实验室及企业级EDA环境。本文聚焦Cadence IC618与Spectre231的安装实践,详解License配置、环境隔离及依赖检查,助你快速搭建可靠设计环境。

weixin_28721917的博客 326

C语言实现 竖式问题

竖式问题。 找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。 输入数字集合(相邻数字之间没有空格),输出所有竖式。 每个竖式前应有编号,之后应有一个空行。 最后输出解的总数。 具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但所写程序中应该输出空格,而非小数点)。 样例输入:2357 样例输出: <1> …775 X…33 ----- .2325 2325. ----- 25575 The number of solut.

Sishxo的博客 2663

[OHIF-Viewers]医疗数字阅片-医学影像-cornerstone-core-Cornerstone.js-Cornerstone Examples-基石实例-下...

[OHIF-Viewers]医疗数字阅片-医学影像-cornerstone-core-Cornerstone.js-Cornerstone Examples-基石实例-下 CT Image with Window presets This is an example of displaying a ct image along with buttons to set ww/wc pres...

浩秦的博客 1841

python用print函数打印皮卡丘_Python学习之print()函数

print()函数的主要功能就是打印内容。注意,在正式敲代码之前,必须切换成英文输入状态,保证print()函数的括号是用【英文括号】,不然会报错????。第一个Python程序,打印 Hello World>>> print('Hello World')Hello World>>>print()函数的用法有以下几种:不带引号>>> print(52...

weixin_39844549的博客 2516

手把手教你用Xilinx SelectIO IP核搞定ADS42LB69高速ADC的DDR数据采集(附仿真调试技巧)

本文详细介绍了如何使用Xilinx SelectIO IP核实现ADS42LB69高速ADC的DDR数据采集,包括IP核配置、仿真验证和硬件调试技巧。通过精准的时序控制和实战调试方法,解决高速数据采集中的时序对齐问题,提升系统稳定性和可靠性。特别适合FPGA工程师和高速ADC接口设计者参考。

weixin_42533622的博客 153

ROS Navigation global_planner框架解析

ROS Navigation global_planner框架解析主要讲一下我看源码总结的框架,如果大家跟着这个框架看源码的话可能会看的比较快。主要讲解global_planner关键配置参数含义及关键函数Astar,Dijkstra,QuadraticCalculator::calculatePotential,PotentialCalculator::calculatePotential,GridPath::getPath,GradientPath::getPath.

Jeff_Lee_的博客 4694

python print 调试_如何用print调试python3代码?

提起print不管是有没有学过编程,我们都对print有一定的了解,在以往的认识中,我们可以简单地理解为打印的意思,不过在函数上很多小伙伴使用它的调用功能多一点。最近在print调用的问题上有一些争议,所以小编把print调用的代码给大家展现出来,具体分析一下这种情况。初学者喜欢使用 print 来调试代码,并记录程序运行过程。但是 print 只会将内容输出到终端上,不能持久化到日志文件中,并不...

weixin_39973492的博客 321

YOLOv11改进策略【Head】| AFPN渐进式自适应特征金字塔,增加针对小目标的检测头(附模块详解和完整配置步骤)

一、本文介绍 本文利用AFPN对YOLOv11的网络模型进行优化提升。AFPN采用渐近式融合及自适应空间融合操作。通过渐近式架构,逐步整合不同层级特征,有效避免非相邻层级间因语义差距过大导致的信息丢失或降级问题,确保在多尺度特征融合过程中既能保留高层语义信息,又能融入低层细节特征。本文将AFPN应用于YOLOv11中,并配置了针对小目标的检测头,能显著增强模型对不同尺度目标的检测能力,使其在复杂场景下更聚焦于目标物体特征,减少背景等无关信息的影响。 专栏目录:YOLOv11改进目录一览 | 涉及卷积层、

Limiiiing的博客 2718

扔掉 print,用 icecream 来调试你的Python代码:告别调试痛点

今天,我要向你介绍一个名为 `icecream` 的Python调试库,它能解决传统 `print` 调试的诸多痛点,让你的调试过程更加优雅高效。

kanhao100的博客 965

OSPF规划两大模型:双塔奇兵、犬牙交错

大家好,今天给大家带来的是OSPF规划两大模型:双塔奇兵、犬牙交错,让我们直接开始吧! OSPF规划之双塔奇兵 说明: OSPF 如果某个区域存在两个 ABR,并且在两个 ABR 上都对 area n 内的路由做了聚合操作。 最佳配置: 两台ABR之间的红线应该使用以太网的子接口技术,一个子接口属于area0,另一个属于 area n;或者该链路规划为 area n,同时配置虚连接; ABR 的 loopback0 规划入 area 0 OSPF 规划之犬牙交错 说明: 有时接入层的设备会以乱序的

网络技术联盟站 2423

硬核干货|C#+EtherCAT协议:高精度多轴伺服运动控制通信实战

本文摘要: 文章聚焦工业自动化领域多轴伺服运动控制的高精度与实时性需求,基于C#与EtherCAT协议实现完整解决方案。EtherCAT凭借微秒级同步、分布式架构等优势成为首选,而C#通过优化GC策略和实时线程可满足工业控制要求。文章从工程落地角度,详细拆解EtherCAT的PDO/SDO通信机制与多轴同步控制逻辑,提供完整的C#代码实现(主站初始化、伺服配置、运动控制等),所有代码均通过汇川/松下伺服实测验证。核心亮点包括:纯C#原生开发、工业现场高频问题解决方案、硬件适配指南,帮助开发者快速掌握高精度多

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 582

别再用print输出来调试Python代码了

作者:changqing,腾讯互娱品质管理部Turing Lab研究员公众号:腾讯技术工程导语:最近在github上冒出了一个python的debug神器PySnooper,号称在debug时可以消灭print。那么该工具有哪些优点呢,如何使用该工具呢。本文就介绍该工具的优缺点和使用方式。前言:使用python开发过程中,总是避免不了debug。传统的debug过程大致分为两种:a) 断点+单步调...

Python小二 1030

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

调试 Python 代码时,print () 不如这行指令,变量值看得明明白白

当代码中插入多个 print () 语句时,控制台会充斥着大量的输出内容,开发者需要在众多信息中筛选出有用的变量值,不仅浪费时间,还容易遗漏关键信息。再者,影响代码性能。pdb 是 Python 自带的交互式调试器,它提供了一系列强大的指令,能够让开发者在程序运行过程中随时暂停、查看变量值、单步执行代码等,从而更清晰地了解程序的执行流程和变量的变化情况。因此,在今后的 Python 开发中,不妨尝试使用 pdb 调试器代替 print () 函数,体验其带来的便捷与高效,让代码调试变得更加轻松自如。

2503_92848840的博客 865

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Python快速入门专业版(五十二): Python程序调试:print调试与pdb调试工具(定位代码错误)

调试是Python开发中不可或缺的技能,print调试和pdbprint调试简单直接,适合快速定位基础逻辑错误,是新手入门的首选;pdb调试功能强大,能应对复杂代码和隐性错误,是解决高级问题的必备工具。掌握调试技巧的核心不仅是学会使用工具,更重要的是培养“逻辑追踪”的思维——通过分析变量变化、执行流程,找到实际与预期的差异,最终定位错误根源。无论是用print还是pdb,调试的本质都是“让代码的执行过程透明化”,只有看清代码的每一步操作,才能高效解决问题。

Pocker_Spades_A的博客 1390

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

weixin_28894541的博客 743

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

点击上方蓝色小字,关注“涛哥聊Python”重磅干货,第一时间送达来源:法纳斯特相信大部分人学习Python,肯定会用print()这个内置函数,来调试代码的。那么在一个大型的项目中,如...

涛哥聊Python 965

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

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

weixin_39978257的博客 513

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

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

SeizeeveryDay的博客 1009
上一篇: 20行代码让你的电脑自动合成大西瓜!这么厉害不来体验一下吗?
下一篇: Python入门后迷茫了怎么办?
python阿喵
博客等级 码龄6年 169粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值