python 调试工具,python调试软件

  python 调试工具,python调试软件

  本文主要介绍了两个方便调试Python代码的实用工具的分享,可以轻松展示我们调试代码的中间状态,提高大家的编码效率。有关所需合作伙伴的详细介绍,请参考以下文章。

  00-1010 1.导言2。动机3。Loguru3.1安装3.2举个栗子3.3使用Loguru4。Snoop4.1安装4.2示例4.3使用阶乘5。摘要

  

目录

  今天给朋友们推荐两个调试Python代码的实用工具,可以轻松展示我们调试代码的中间状态,提高大家的编码效率。

  

1. 引言

  日常工作中,经常写Python的小伙伴经常会遇到需要调试代码bug的情况。有时候我们在Python中的错误消息特别难看。

  举例如下:

  2除以1等于2.0。

  回溯(最近呼叫):

  模块中第17行的文件“loguru_example.py”

  除法数字(数字列表)

  文件“loguru_example.py”,第11行,在divide_numbers中

  res=除法(num1,num2)

  文件 loguru_example.py ,第5行,在分部

  返回数字1/数字2

  零除错误:被零除

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

  哇,没有比较就没有伤害。看了上面的展示,有木有之心。

  好了,我们可以通过Python的一些第三方包来达到上面的调试效果。让我们来看看以下两个第三方Python包:

  Loguru:更好的打印程序异常snoop:打印函数中正在执行的代码没有问题。接下来,我们就来一一介绍这些有用的工具。

  

2. 动机

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

  

3. Loguru

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

  pip安装loguru

  

3.1 安装

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

  如下所示:

  从itertools导入组合

  def分部(num1: int,num2: int):

  返回数字1/数字2

  def divide _ numbers(num _ list : list):

  数字列表中2个数字的除法

  用于组合中的组合(编号列表,2):

  num1,num2=梳齿

  res=除法(num1,num2)

  print(f { num 1 }除以{num2}等于{res}。)

  if __name__==__main__:

  数字列表=[2,1,0]

  除法数字(数字列表)

  注意组合([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调试代码工具内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: