答应我,忘了他!调试python不要再用print了!冰淇淋工具来陪你甜

答应我,忘了他!调试python不要再用print了!冰淇淋工具来陪你甜,第1张

概述大家好,我是Lex喜欢欺负超人那个Lex擅长领域:python开发、网络安全渗透、Windows域控Exchange架构今日重点:调试python不要再用print()了,甜甜的冰激凌调试工具来了事情是这样的望着窗外,太阳在乌云背后努力想把阳光撒向人间雨过天青云破处吹来的缕缕微风拂过你的脸颊迎
大家好,我是Lex 喜欢欺负超人那个Lex擅长领域:python开发、网络安全渗透、windows域控Exchange架构今日重点:调试python不要再用print()了,甜甜的冰激凌调试工具来了
事情是这样的

望着窗外,太阳在乌云背后努力想把阳光撒向人间

雨过天青云破处吹来的缕缕微风拂过你的脸颊

迎着微风贪婪的深吸一口

拔掉电源,回想你这一生

最依赖的python的函数是什么

emmm,我猜一定是print()

从入坑案例 print(‘Hello World’) 开始

你的代码越写越多,逻辑越来越复杂

但是在代码的巷陌之间

总是穿插着大量的print()调试语句

输出的结果,让人欢喜让人忧

答应我,从今天开始,忘了他

以后用ice cream


ice cream

1、安装

pip install icecream

2、调用方法

from icecream import icic('test')

案例解析下面我们通过几个比对案例,来详细介绍一下 ice cream 到底比 print() 强在哪里。案例1:访问函数
#案例1:计算平方数def Pingfang(number):	return number*number
如果我们需要调试函数,获取2,3,4的平方数。那么输出结果,需要这么写
print(Pingfang(2))print(Pingfang(3))print(Pingfang(4))
输出结果如下:
4916

输出结果并不清晰,输入参数都看不见。

优化一下:

print('2的平方是:',Pingfang(2))print('3的平方是:',Pingfang(3))print('4的平方是:',Pingfang(4))
输出结果如下:
2的平方是:43的平方是:94的平方是:16

这样的输出,才是合理的,但是这样我们每个都要这么写,估计会疯掉。

而且,当代码正式上线运行的时候,我们要注释大量的代码。

不扯了,上icecream

#引入icecream模块 代替printfrom icecream import icdef Pingfang(number):	return number*number#使用ic进行调试ic(Pingfang(2))ic(Pingfang(3))ic(Pingfang(4))
输出结果如下:
ic| Pingfang(2): 4ic| Pingfang(3): 9ic| Pingfang(4): 16
结果非常清晰。
案例2:访问字典
#示例2:科比字典访问kobe_dict = {  'name': 'KobeBryant',  'team': 'LALakers',  'number': 24,  'halloffame' : True}

访问方法:

#print方法print(kobe_dict['team'])#ic方法ic(kobe_dict['team'])

输出结果对比:

高下立判
#print输出LALakers#ic输出ic| kobe_dict['team']: 'LALakers'

案例3:访问对象
#示例3:湖人类class Lakers():    city = 'los angles'    player = 'kobe'    NBA = True

输出结果对比:

#print方法输出lakers=Lakers()print(lakers.city)print(lakers.NBA)#ic方法输出ic(lakers.city)ic(lakers.NBA)

案例4:精准调试代码我们在调试业务逻辑比较复杂的代码的时候,为了验证业务在哪个逻辑或者哪一行输出有问题了。一般都在要监控的代码下面,加一个
print(‘aaa’)、print(‘bbbb’)或者print(’------------’),搞的代码非常混乱,而且输出也不够精准。
#示例4:记录代码位置def position(name):    if name == 'kobe':        #啪啪啪,业务代码一大堆        ic()    else:        #啪啪啪,业务代码又一大堆        ic()if __name__ == '__main__':	position('kobe')    position('micheal')

输出结果:

我们可以精确的输出业务代码的位置。


案例5:始乱终弃很方便当我们使用print()进行python调试的时候,加了一大堆又臭又长的 print(‘aaa’)、print(‘bbbb’)
或者print(’------------’),当项目正式上线的时候,肯定要去注释掉这些test输出。这个时候,我们才发现:“他们都老了吗,他们在哪里呀~~~” 找不着了,是吧?!这时候又要翻箱倒柜的去找来注释。这时候,如果我们用icecream进行调试。只要开头加上一句
ic.disable() #关闭ic调试。[默认开启]
你所有的添加的ic输出,相当于你的历史渣男记录,全部洗白。如下 ↓ ↓ ↓
from icecream import ic#关闭所有ic调试输出ic.disable()#业务代码一大堆,啪啪啪...#...
如果想要使用ic输出,只要开头启用就好了。
ic.enable()  #启用ic调试

案例6:自定义ic输出很方便icecream 的默认输出格式:
ic| test-ic.py:28 in position() at 14:28:51.172ic| test-ic.py:31 in position() at 14:28:51.190
包括:
包括前缀:ic文件名:test-ic.py 代码位置:28行 函数:position()
1、修改前缀:加上自定义内容
ic.configureOutput(prefix='lex的爬虫 | ')ic('运行到这里了...')
输出效果如下:

2、输出代码运行的时间

有时候,进行代码输出调试的时候,需要知道代码运行该位置时的精确时间,我们可以自定义icecream来实现带时间的输出。
#定义一个返回当前时间的函数from datetime import datetimedef Now():    return f'[{datetime.Now()}]'#将函数返回值,配置进ic里ic.configureOutput(prefix=Now)ic('运行到这里了...')
输出结果如下:

推荐阅读python实战

【python实战】前女友婚礼,python破解婚礼现场的WIFI,把名称改成了

【python实战】前女友发来加密的 “520快乐.pdf“,我用python破解开之后,却发现

【python实战】昨晚,我用python帮隔壁小姐姐P证件照自拍,然后发现…

【python实战】女友半夜加班发自拍python男友用30行代码发现惊天秘密

【python实战】python你TM太皮了——区区30行代码就能记录键盘的一举一动

【python实战】女神相册密码忘记了,我只用Python写了20行代码~~~

pygame系列文章【订阅专栏,获取完整源码】

一起来学pygame吧 游戏开发30例(二)——塔防游戏

一起来学pygame吧 游戏开发30例(四)——俄罗斯方块小游戏

渗透测试实战专栏

Windows AD/Exchange管理专栏

Linux高性能服务器搭建

PowerShell自动化专栏

CSDN官方学习推荐 ↓ ↓ ↓

CSDN出的Python全栈知识图谱,太强了,推荐给大家!

@H_53_403@

总结

以上是内存溢出为你收集整理的答应我,忘了他!调试python不要再用print了!冰淇淋工具来陪你甜全部内容,希望文章能够帮你解决答应我,忘了他!调试python不要再用print了!冰淇淋工具来陪你甜所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1185740.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存