当前位置: 首页 > 科技 > 人工智能 > 谷歌大牛技术分享:如何使用Python调试器_腾讯新闻

谷歌大牛技术分享:如何使用Python调试器_腾讯新闻

天乐
2020-06-18 16:06:29 第一视角

今天不讲关于人工智能的技术,今天讲解基础的,关于在数据科学实践中经常派上用场的软件工程。

编写代码时,每个人都会出错。有时很难调试它们。使用调试器可能会有所帮助,但也会令人生畏。这是有关在IPython中使用pdb的TLDR教程,重点是查看函数内部的变量。

拥有全局变量的优点是,当脚本因错误而停止时,你可以查看变量以查找原因。具有功能,没有这种运气。当然,任何不平凡的软件都需要功能。

这是调试器的来源。Python带有一个称为pdb的调试器。我们将研究如何在IPython中使用它。

首先,打开它:

In [1]: pdb Automatic pdb calling has been turned ON

方便的是,你可以选择仅在发生错误后进入调试模式。在这种情况下,您只需键入debugpost factum。感谢Ehud Ben-Reuven指出了这一点。

这两个PDB调试是IPython的魔法命令,所以他们的官方语法%PDB%调试。如果没有这些名称的全局变量,则较短的形式有效。

现在,让我们定义一个函数:

def add_two( x ): return x + 2

发生错误时,您将收到调试器提示:

In [3]: add_two('two') --------------------------------------------------------------------------- TypeError Traceback (most recent call last) in () ----> 1 add_two('two') in add_two(x) 1 def add_two( x ): ----> 2 return x + 2 TypeError: cannot concatenate 'str' and 'int' objects > (2)add_two() 1 def add_two( x ): ----> 2 return x + 2 ipdb>

或者,通过自动pdb取消调用(发现第一个差异):

In [3]: add_two('two') --------------------------------------------------------------------------- TypeError Traceback (most recent call last) in () ----> 1 add_two('two') in add_two(x) 1 def add_two( x ): ----> 2 return x + 2 TypeError: cannot concatenate 'str' and 'int' objects In [4]: debug > (2)add_two() 1 def add_two( x ): ----> 2 return x + 2 ipdb>

在此示例中,错误是显而易见的,并且在消息中已阐明,因此我们实际上不需要调试器。关键是要在实际使用中熟悉它。

pdb接受许多命令,其中许多是一个字母。您可以使用h列出它们。

就我们的目的而言,最重要的命令是p,用于“打印”:

ipdb> h p p expression Print the value of the expression. ipdb> p x 'two'

镜框

使用外部库时,堆栈跟踪由许多帧组成。在英语中,它表示一个称为函数的函数,该函数称为一个函数,依此类推,并且在此堆栈中的某处发生了错误。通常,最有趣的是在自己的代码中发现错误,但调试器将位于最深层的最深层函数中。我们需要向上移动堆栈,执行该命令的命令是u。你键入它,直到显示熟悉的代码段。现在您可以检查变量。

痕迹/断点

不需要错误即可停止程序执行并进入调试器。在代码中的某处设置跟踪或断点就足够了:

import pdb; pdb.set_trace()

当执行到此点时,程序将停止,并且您将收到调试器提示。要继续执行,请使用c命令。

您还可以使用b命令从调试器中添加断点。

q退出调试器。您也可以使用Ctrl-D退出。

完成调试并且不希望调试器提示错误时,请将其关闭:

In [5]: pdb Automatic pdb calling has been turned OFF

分享到这,如果觉得有用的话可以关注我。

提示:支持键盘“← →”键翻页
为你推荐
加载更多
意见反馈
返回顶部