千家信息网

为什么不用Print调试Python

发表于:2024-09-24 作者:千家信息网编辑
千家信息网最后更新 2024年09月24日,这篇文章主要介绍"为什么不用Print调试Python",在日常操作中,相信很多人在为什么不用Print调试Python问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"为
千家信息网最后更新 2024年09月24日为什么不用Print调试Python

这篇文章主要介绍"为什么不用Print调试Python",在日常操作中,相信很多人在为什么不用Print调试Python问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"为什么不用Print调试Python"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

相信大部分人学习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 - plus_five(4): 9  ic| ice_test.py:8 in - 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 - plus_five(4): 9  ic| ice_1.py:8 in - 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代码就整洁了。

到此,关于"为什么不用Print调试Python"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

输出 代码 结果 函数 学习 不用 信息 参数 文件 语句 前缀 时间 更多 漂亮 两个 文本 是由 尝试 帮助 运行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广播电视网络技术专业课程 我的世界服务器账号达到限制 vip的服务器在哪里 后端程序员需要创建数据库吗 网络技术证书的条件 济源网络技术近期价格 行业网络安全应急方案 ctf网络安全大赛基础书籍 有关网络安全的视频 清考计算机网络技术题库 数据库csv格式乱码怎么办 红花多多网络技术有限公司 凑热闹伴奏软件开发 网络技术专业解说词 智能客服用什么软件开发 该如何进行计算机网络安全 浪潮服务器远程管理口配地址 湖北服务器虚拟化优化服务器 福州英才软件开发有限公司 关于不动产地籍数据库的意见 宇哥玩access数据库啥意思 如何自己更改网络安全秘要 章丘制造业管理软件开发公司 数据库的表可以排序吗 易 打一个网络技术 rds 数据库恢复 河南计算机软件开发费用 it公司网络安全宣传方案 steam饥荒改专用服务器 同为股份网络安全概念
0