有什么好用的Python代码调试工具,怎么用
Admin 2022-08-19 群英技术资讯 221 次浏览
今天来给小伙伴推荐两款实用的便于调试Python代码的工具,可以方便展示我们调试代码的中间状态,提升大家的编码效率。
在日常工作中,经常写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是一个旨在使Python中的日志显示变得有趣的库。Loguru提供了许多有趣的功能,但我发现该库最有用的一个功能是捕获程序异常并显示导致代码失败的变量值。
我们可以使用pip来直接进行安装,代码如下:
pip install loguru
为了理解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
通过上述输出,我们知道代码行 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时导致函数出现异常错误信息。
如果我们编写完的代码经过调试后没有了错误,但我们想弄清楚代码运行时发生了什么?这就是snoop派上用场的情形。
snoop是一个第三方的Python包,通过只添加一个装饰器可以方便地打印正在执行的代码行以及每个变量的值。
同样我们依然可以通过pip
来安装snoop
库,代码如下:
pip install snoop
假设我们有一个名为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
为了理解为什么函数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)}")
输出如下:
在上述输出中,我们可以查看变量的值以及实际代码运行情形。进而通过上述输出,我们可以更好地理解递归的工作原理!
文章重点介绍了两种跟踪和可视化Python代码执行的工具。我希望通过使用这两款调试工具,来大大提升大家的工作效率和定位问题的能力。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
1.问题说明最近用DataFrame做大数据处理,发现处理速度特别慢,追究原因,发现是循环处理时,loc,iloc速度都特别慢,当数据量特别大得时候真的是超级慢。查很多资料,发现没有详细说明,以下为解决办法2.问题解决使用Pandas.Series.apply方法,可以对一列数据快速进行处理Series.apply(*func*,*convert_dtype=True*,*arg
假如有这样一个问题给你一个整数数组 coins ,表示不同面额的硬币以及一个整数 amount ,表示总金额,计算并返回可以凑成总金额所需的最少的硬币个数,接下来通过示例代码给大家介绍Python零钱兑换问题,感兴趣的朋友一起看看吧
这篇文章主要介绍了python中的多cpu并行编程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
在使用电脑办公时,有时候不知道哪些软件或进程会占用大量的资源,导致进行其他任务时出现变慢、卡顿等现象。因此,实时监控系统的资源就变得非常重要。本文用Python编写了一款超治愈的RunCat监控应用系统,需要的可以参考一下
Python基础-字符串,元组,数组,字典-公共方法
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008