分享方便调试Python代码的2个实用工具

目录
  • 1. 引言
  • 2. 动机
  • 3. Loguru
    • 3.1 安装
    • 3.2 举个栗子
    • 3.3 使用Loguru
  • 4. Snoop
    • 4.1 安装
    • 4.2 举例
    • 4.3 使用factorial
  • 5. 总结

1. 引言

今天来给小伙伴推荐两款实用的便于调试Python代码的工具,可以方便展示我们调试代码的中间状态,提升大家的编码效率。

2. 动机

在日常工作中,经常写Python的小伙伴经常会遇到需要调试代码bug的情形,有时候我们Python的错误提示信息特别丑,

举例如下:

2 divided by 1 is equal to 2.0.
Traceback (most recent call last):
File "loguru_example.py", line 17, in <module>
divide_numbers(num_list)
File "loguru_example.py", line 11, in divide_numbers
res = division(num1, num2)
File "loguru_example.py", line 5, in division
return num1/num2
ZeroDivisionError: division by zero

如果你觉得尚可接受,那我们不妨来看下如下显示错误的方式:

哇偶,没有对比就没有伤害,看了上述的显示,有木有心动。
好滴,我们可以通过一些Python的第三方包,来实现上述调试效果。我们来看如下两款第三方Python包:

  • Loguru: 更好的打印程序异常
  • snoop: 打印函数中正在执行的代码行

好了,接下来我们就来一个个的介绍这些好用的工具吧。

3. Loguru

Loguru是一个旨在使Python中的日志显示变得有趣的库。Loguru提供了许多有趣的功能,但我发现该库最有用的一个功能是捕获程序异常并显示导致代码失败的变量值。

3.1 安装

我们可以使用pip来直接进行安装,代码如下:

pip install loguru

3.2 举个栗子

为了理解Loguru是如何工作的,假设我们现在有两个函数​​division​​和​​divide_numbers​​,

如下所示:

from itertools import combinations
def division(num1: int, num2: int):
return num1/num2
def divide_numbers(num_list: list):
"""Division of 2 numbers in the number list """
for comb in combinations(num_list, 2):
num1, num2 = comb
res = division(num1, num2)
print(f"{num1} divided by {num2} is equal to {res}.")
if __name__ =='__main__':
num_list = [2, 1, 0]
divide_numbers(num_list)

注意​​combinations([2,1,0], 2)​​返回值为​​[(2, 1), (2, 0), (1, 0)]​​。

运行上述代码后,我们会出现以下错误:

2 divided by 1 is equal to 2.0.
Traceback (most recent call last):
File "loguru_example.py", line 17, in <module>
divide_numbers(num_list)
File "loguru_example.py", line 11, in divide_numbers
res = division(num1, num2)
File "loguru_example.py", line 5, in division
return num1/num2
ZeroDivisionError: division by zero

3.3 使用Loguru

通过上述输出,我们知道代码行 ​​return num1/num2 ​​是错误发生的地方,但是我们并不清楚​​num1​​和​​num2​​的那些值导致的错误。幸运的是,我们可以通过添加Loguru的装饰器来捕捉此时的异常,

代码如下:

from loguru import logger
from itertools import combinations
def division(num1: int, num2: int):
return num1/num2
@logger.catch # Add this to track errors
def divide_numbers(num_list: list):
for comb in combinations(num_list, 2):
num1, num2 = comb
res = division(num1, num2)
print(f"{num1} divided by {num2} is equal to {res}.")
if __name__ =='__main__':
num_list = [2, 1, 0]
divide_numbers(num_list)

运行结果如下:

通过在代码中添加​​logger.catch​​,此时的异常情况更加容易被理解!我们通过观察此时的输出,可以明确的知道当2除以0时导致函数出现异常错误信息。

4. Snoop

如果我们编写完的代码经过调试后没有了错误,但我们想弄清楚代码运行时发生了什么?这就是snoop派上用场的情形。

4.1 安装

snoop是一个第三方的Python包,通过只添加一个装饰器可以方便地打印正在执行的代码行以及每个变量的值。
同样我们依然可以通过​​pip​​来安装​​snoop​​库,代码如下:

pip install snoop

4.2 举例

假设我们有一个名为​​factorial​​的函数,它主要用于实现计算整数的阶乘。

代码如下:

import snoop
def factorial(x: int):
if x == 1:
return 1
else:
return (x * factorial(x-1))
if __name__ == "__main__":
num = 5
print(f"The factorial of {num} is {factorial(num)}")

输出如下:

The factorial of 5 is 120

4.3 使用factorial

为了理解为什么函数​​factorial​​的输出值为20,我们可以通过添加​​snoop​​的装饰器来查看函数的调用情形,代码如下:

import snoop
@snoop
def factorial(x):
if x == 1:
return 1
else:
return (x * factorial(x-1))
if __name__ == "__main__":
num = 5
print(f"The factorial of {num} is {factorial(num)}")

输出如下:

在上述输出中,我们可以查看变量的值以及实际代码运行情形。进而通过上述输出,我们可以更好地理解递归的工作原理!

5. 总结

文章重点介绍了两种跟踪和可视化Python代码执行的工具。我希望通过使用这两款调试工具,来大大提升大家的工作效率和定位问题的能力。

到此这篇关于分享方便调试Python代码的2个实用工具的文章就介绍到这了,更多相关 Python调试代码工具内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python代码覆盖率统计工具coverage.py用法详解

    1.安装coverage pip install coverage 安装完成后,会在Python环境下的\Scripts下看到coverage.exe: 2.Coverage 命令行 coverage run 运行一个.py的文件方式:python test.py 现在使用coverage执行.py的文件方式:coverage run test.py 会自动生成一个覆盖率统计结果文件(data file):.coverage,这个文件在你的test.py的文件对应目录下. coverage re

  • Python性能分析工具pyinstrument提高代码效率

    目录 安装 简单的使用 分析 Flask 代码 分析 Django 代码 分析异步代码 工作原理 最后的话 天下武功,唯快不破. 编程也不例外,你的代码跑的快,你能快速找出代码慢的原因,你的码功就高. 安装 pip install pyinstrument 简单的使用 在程序的开始,启动 pyinstrument 的 Profiler,结束时关闭 Profiler 并打印分析结果如下: from pyinstrument import Profiler profiler = Profiler()

  • pyCaret效率倍增开源低代码的python机器学习工具

    目录 PyCaret 时间序列模块 加载数据 初始化设置 统计测试 探索性数据分析 模型训练和选择 保存模型 PyCaret 是一个开源.低代码的 Python 机器学习库,可自动执行机器学习工作流.它是一种端到端的机器学习和模型管理工具,可以以指数方式加快实验周期并提高您的工作效率.欢迎收藏学习,喜欢点赞支持,文末提供技术交流群. 与其他开源机器学习库相比,PyCaret 是一个替代的低代码库,可用于仅用几行代码替换数百行代码. 这使得实验速度和效率呈指数级增长. PyCaret 本质上是围绕

  • 常用的Python代码调试工具总结

    前言 我自己常用的简单Python代码调试工具是IDLE和Sublime3,IDLE很少使用了,基本上用Sublime3稍微多一些,Sublime3因为简单方便更直观.(VSCode也是一个不错的推荐,不过我没用过,心向往之.) 但实际开发中,基本上就使用PyCharm. 一.Python的交互模式 安装完成Python的解释器后,当我们在命令行中直接输入python命令,所进入到的界面就是Python的交互界面. 如下图所示: 在命令提示符后可以直接输入Python的指令,输入完的指令回车后,

  • 七种Python代码审查工具推荐

    虽然Python语言可谓目前最为灵活的开发语言之一,但是开发人员往往会滥用其灵活性,甚至会违反相关的标准.因此,Python代码也经常会出现如下常见质量问题: 导入了一些未曾用到的模块 函数在各种调用中缺少参数 缺少适当的格式缩进 在圆括号.方括号或大括号的前后缺少恰当的空格 显然,上述问题不但会影响代码的可读性,而且会使得代码的审查工作变得更为复杂.为此,我们需要通过诸如PyLint或Flake8 之类的静态分析工具来解决此问题,并减少各种可能出现的误报现象. 与此同时,随着软件开发团队规模的

  • Python使用PyAudio制作录音工具的实现代码

    目录 应用平台 音频录制部分 音频播放部分 GUI窗口所需属性值代码部分 pynput监听键盘 总结 最近有在使用屏幕录制软件录制桌面,在用的过程中突发奇想,使用python能不能做屏幕录制工具,也锻炼下自己的动手能力.接下准备写使用python如何做屏幕录制工具的系列文章: 录制屏幕制作视频 录制音频 合成视频,音频 基于pyqt5制作可视化窗口 大概上述四个部分,希望自己能够尽快完善,上一篇文章利用opencv制作了屏幕录制部分,接下继续更新系列,使用python录制音频. 应用平台 win

  • 分享方便调试Python代码的2个实用工具

    目录 1. 引言 2. 动机 3. Loguru 3.1 安装 3.2 举个栗子 3.3 使用Loguru 4. Snoop 4.1 安装 4.2 举例 4.3 使用factorial 5. 总结 1. 引言 今天来给小伙伴推荐两款实用的便于调试Python代码的工具,可以方便展示我们调试代码的中间状态,提升大家的编码效率. 2. 动机 在日常工作中,经常写Python的小伙伴经常会遇到需要调试代码bug的情形,有时候我们Python的错误提示信息特别丑, 举例如下: 2 divided by

  • 分享10提高 Python 代码的可读性的技巧

    目录 1.字符串反转 2.首字母大写 3.查询唯一元素 4.变量交换 5.列表排序 6.列表推导式 7.合并字符串 8.拆分字符串 9.回文串检测 10.统计列表元素出现次数 1. 字符串反转 字符串反转有很多方法,咱们再这里介绍两种:一种是切片,一种是python字符串的reversed方法. # -!- coding: utf-8 -!- string = 'hello world' # 方法1 new_str = string[::-1] ic(new_str) # 方法二 new_str

  • java程序代码与文本对比实用工具简介

    1.WinMerge WinMerge是一款运行于Windows系统下的文件比较和合并工具 https://winmerge.org/downloads/?lang=en 2.Diffuse Diffuse在命令行中的速度是相当快的,支持像C++.Python.Java.XML等语言的语法高亮显示.可视化比较,非常直观,支持两相比较和三相比较.这就是说,使用Diffuse可以同时比较两个或三个文本文件 http://diffuse.sourceforge.net/ 3.Beyond Compar

  • 在Linux下调试Python代码的各种方法

    这是一个我用于调试或分析工具概述,不一定是完整全面,如果你知道更好的工具,请在评论处标记. 日志 是的,的确,不得不强调足够的日志记录对应用程序是多么的重要.您应该记录重要的东西,如果你的记录足够好的话,你可以从日志中找出问题从而节省大量的时间. 如果你曾经用print语句来调试代码现在停下吧,用logging.debug替代,开始可以慢慢来,以后完全禁用它... 追踪 有时看到程序如何被执行会很有帮助.你可以使用IDE的调试共轭ngn一步一步的运行程序,但你需要知道你要找的是什么,否则这将会是

  • 使用Python中PDB模块中的命令来调试Python代码的教程

    你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇到上述境地的次数比你想要的还要多.然而,Python中有一个整洁的调试特性(像其他大多数语言一样),在这种情况下使用非常方便.本文是一篇快速教程,希望它能让你的编码生活更加容易. 1. 一个混乱的程序 出于本教程的目的,让我们研究一下下面的简单程序. 这个程序接收两个命令行参数,然后执行加法和减法操作. (假设用户输入的是有效值,因此代码中我们没有进行错误处理.) import sys def add(num1=0, n

  • 分享10个优化代码的CSS和JavaScript工具

    检查和测试代码来发现任何潜在错误,从而在放到网站上之前及时消除错误是一个非常重要的过程.代码检查的过程也俗称为是Web设计师 和开发者之间的linting.作为一个设计师,如果你想要写出高度优化的代码,那么你一定需要linting工具.有两种类型的代码检查工具.一种是在 执行时间检查代码中的错误和bug.另一种是使用静态代码分析技术并在执行前检查码.后者因为可以节省时间和麻烦显然更佳. 事实上,linting可以放在不同的阶段.如果你喜欢在敲代码的时候测试代码,那么你可以使用lint工具.当然,

  • 如何基于Python代码实现高精度免费OCR工具

    近期Github开源了一款基于Python开发.名为Textshot的截图工具,刚开源不到半个月已经500+Star. 这两天抽空看了一下Textshot的源码,的确是一个值得介绍的项目. 相对于大多数OCR工具复杂工程.差强人意的效果,Textshot具有明显的优势, 项目简单 技术点丰富 项目简单 Textshot整个项目只有1个Python文件.139行代码,没有复杂的第三方库应用,也不涉及过多后端算法的调用. 技术点丰富 Textshot这个项目虽然只有短短的139行代码,但是,却涉及P

  • 20个解决日常编程问题的Python代码分享

    目录 1. 简单的 HTTP Web 服务器 2.单行循环List 3.更新字典 4.拆分多行字符串 5. 跟踪列表中元素的频率 6. 不使用 Pandas 读取 CSV 文件 7. 将列表压缩成一个字符串 8. 获取列表中元素的索引 9. Magic of *arg 10. 获取任何数据的类型 11.修改打印功能 12. 字符串去大写 13. 更快捷的变量交换方式 14. 分色打印 15. 获取网页 HTML 数据 16. 获取数据占用的内存 17. 简单的类创建 18. 字符串乘法器 19.

  • python的debug实用工具 pdb详解

    叨逼叨 首先,介绍一下 pdb 调试,pdb 是 python 的一个内置模块,用于命令行来调试 Python 代码.或许你会说,现在用 Pycharm 等编辑器来调试代码很方便,为啥要用命令行呢?这个问题,我曾经也这么想,直到有一次,代码必须要在 Linux 系统上跑(现在 Pycharm 也可以远程调试代码了,今天先不说这个) 使用介绍 如何添加断点? 说到 debug,肯定是要添加断点的,这里有两种方式添加断点: 在想要断点代码后添加 一行 pdb.set_trace() 若是使用这种方式

随机推荐