如何在 Python 中调试:使用交互式 python 调试器 ipdb 进行智能调试


很多时候在使用 Python 时,你会碰壁并努力弄清楚为什么一个函数不起作用。 一种常见的基本调试方法是使用打印语句,但这可能既乏味又耗时。 幸运的是,有一种更好的调试 Python 代码的方法:交互式 Python 调试器 ipdb。

在本文中,我们将讨论 ipdb 的基础知识以及如何使用它来调试 python 代码。

什么是ipdb?

ipdb 是一个交互式 python 调试器,允许您逐行单步执行代码。 它允许您检查变量及其值、设置断点,甚至即时执行代码。 它是调试 python 代码的强大工具,可以为您节省大量时间和挫折感。

ipdb的使用方法

我将使用您可能在数据科学应用程序中遇到的示例来解释如何使用 ipdb。 想象一下,您正在尝试使用日志函数转换数据,但遇到了引发错误的情况:

import math


def log_transform(x):
  return math.log(x)


log_transform(5)
log_transform(0)

在这里,你会遇到像这样的math域错误:

ValueError: math domain error

但您可能不会立即意识到原因。 如果我们用 pip 安装 ipdb:

pip install ipdb

然后我们可以使用 ipdb 来调试我们的代码。 为此,我们将在发生错误的行插入一个断点。 我们可以通过在代码中添加以下行来做到这一点:

import ipdb; ipdb.set_trace() 

因此,您的脚本(我们将其命名为 test_program.py)将更改为以下内容:

import math


def log_transform(x):
  import ipdb; ipdb.set_trace()
  return math.log(x)


log_transform(5)
log_transform(0)

现在,当您使用 python test_program.py 运行代码时,您将被带到 ipdb 提示符。 在这里您可以检查变量的值并逐行执行代码。

在 ipdb 提示符下,您还可以键入 help 以获取命令列表。 最有用的命令是 list、step、next、continue、print 和 quit。

您还可以键入 help,然后键入命令来了解该命令的作用。 例如,help list 将为您提供 list 命令的说明。 让我们看看我们的例子。

我们可以键入 list 来查看断点周围的代码。 然后我们可以键入 step 进入函数,next 移动到下一行,并继续运行代码直到下一个断点。 我们还可以使用任何 python 代码来弄清楚发生了什么。 例如,我们可以使用 print 来打印出一个变量的值。 如果我们输入 print(x),我们将看到变量 x 的值。

通过使用ipdb,我们可以快速的找出错误的来源。 在这种情况下,如果我们使用 continue 命令遍历参数为 5 的第一个 log_transform,我们会看到该函数运行良好。 如果我们再次键入 continue,我们会看到当我们尝试使用参数 0 运行该函数时会发生错误。

我们还可以通过使用 python test_program.py 再次进入交互式调试器来缩小范围,第二次使用 continue 调用该函数,使用 print(x) 测试参数 x 是什么并测试 commandmath.log(x ) 以及该特定代码行中可用的所有变量(x 等于 0)。 此工作流确实有助于处理更复杂的案例和应用程序,在这些案例和应用程序中,您可能有许多可能成为问题的变量。

我们现在通过添加一行代码并交互式地使用调试器缩小了错误原因的范围。 如果我们做一些研究,或者这带来了一些日志的先验知识,我们会发现错误的原因是日志函数没有为 0 定义。然后我们可以添加一些代码,使这一点对我们来说更明显 未来或与我们一起工作的其他程序员使用智能错误检查,例如

def log_transform(x):
  if x == 0:
    raise ValueError('Log function is not defined for 0')
  return math.log(x)

使用 ipdb 可以节省很多时间和挫折感。 因此,下次您在使用 Python 编程时遇到困难时,请尝试使用 ipdb,看看它如何帮助您调试代码。

展开阅读全文

页面更新:2024-04-11

标签:提示符   断点   变量   应用程序   函数   命令   错误   参数   原因   代码   智能

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top