Advertisement

python 逐行调试工具_Python调试的三个工具

阅读量:
ac597fa750fa1a8536072ad396b527f0.png

对于Python代码的调试来说,我们一般都会采用IDE自带的.debugging功能来进行操作。然而这种功能也存在一定的限制性在某些情况下比如希望在测试服务器上进行代码开发并希望避免在测试环境外运行IDE的情况下该怎么办呢?这时我们可以借助下面介绍的具体三个工具来进行处理

准备调试代码

在介绍三个调试工具之前,我们先编写一段待调试的代码。这段代码极为简单,并用于计算两个数相除的结果。在编写这段代码时,默认情况下我们故意设置了可能导致除以零错误的情况,请考虑函数参数可能出现的问题。函数定义如下:def division(start, end)

for i in range(start, end, -1):

num1 = i

num2 = i - 1

result = num1 / num2

print(result)

if name == 'main':

division(10, 0)

PySnooper

PySnooper 是 Python 中的一个第三方软件包。该软件包能够详细记录代码运行的时间、顺序以及局部变量的状态变化。其使用方法极为简便,请直接将其作为装饰器进行包装即可完成功能。

1. 安装 PySnooper

在控制台输入如下命令:pip install pysnooper

2. 加入 PySnooper

首先需要引入 PySnooperimport pysnooper

接着在需要测试的函数上加上 pysnooper 装饰器@pysnooper.snoop()

def division(start, end):

for i in range(start, end, -1):

num1 = i

num2 = i - 1

result = num1 / num2

print(result)

if name == 'main':

division(10, 0)

在控制台输入命令:python text.py

运行代码后,控制台输出如下内容:

04edd97947529851243f4e39a4e1f08a.png
07c1234c54cdb64f983ab9b3f0516790.png

通过截图可以看到 PySnooper 输出了每条指令的执行顺序、耗时以及运行过程中的变量值变化情况,并附带错误信息。在实际开发中 PySnoaper 生成的日志数据量较大,在终端查看会显得有些不便。此时可以选择将日志输出至本地文件并修改装饰器路径即可完成操作:@pysnooer.snoop('/app/project_log.log')

@pysnooper.snoop(prefix='MyCompanyName: ')

之前我们讨论的重点是如何在函数层面应用装饰器来实现对整个程序逻辑的跟踪与分析。然而,在实际项目中一个完整的功能模块通常会包含大量的操作内容。如果对整个模块进行实时跟踪可能会导致日志输出过于繁杂难以有效管理。这时我们可以借助PySnooper的局部监控模块来关注特定需要监控的代码块从而优化资源消耗并提升系统性能效率。接下来我们需要修改代码以专注于输出值的获取:导入PySnooper模块即可完成这一目标。

def division(start, end):

for i in range(start, end, -1):

with pysnooper.snoop():

num1 = i

num2 = i - 1

result = num1 / num2

print(result)

if name == 'main':

division(10, 0)

Better-exceptions

Better-exceptions 也是 Python 的第三方工具库之一。它之所以出现其实是因为其设计初衷非常简单明了——即"美化错误信息"(虽然听起来好像开发者有点随意)。该工具库主要依赖于Python的标准库模块sys中的excepthook方法。每当Python程序运行过程中发生错误时,默认情况下解释器会调用excepthook方法并传递三个关键参数:错误类型、具体错误实例以及完整的错误 traceback对象。这意味着我们可以重新编写该机制以便捕捉此类错误。然而这一功能由于Web框架已经具备完善的错误处理机制而变得不再必要——因为Web框架已经处理了所有系统级的错误并不会再通过hook方式触发Better-exceptions进行处理。让我们接下来深入探讨如何利用Better-exceptions进行相关的优化与实现细节吧!

1、安装 Better-exceptions

首先在控制台输入如下命令:pip install better-exceptions

随后,在控制台处录入以下代码段以配置环境变量:setx BETTERExceptions 1

2. 调试代码

在控制台输入命令:python text.py

代码运行后,控制台输出如下图:

3cb3335f699a0b3239f97a95220da86d.png

观察上文的图表可以看出

PDB

Python 内置模块PDB可被调用。通过调用该模块即可设置断点并进行程序调试。无需额外安装第三方工具即可使用,在终端中运行以下命令即可:python -m pdb Test.py

执行该命令后将引导程序进入PDB调试模式。当希望在代码中设置断点时,在相应位置插入相应的指令即可。

f6280a21b430c69af37aadf10cc7b77f.png

总结

我们介绍了PySnooper、Better-exceptions和PDB的使用方法。这些工具通常应用于服务器环境。因此,我推荐采用Better-exceptions这一方案,因为它对代码修改的影响较小,并且其干扰程度较低。

云海天教程网,免费的在线学习python平台,欢迎关注!

全部评论 (0)

还没有任何评论哟~