Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让Python代码第一次运行的好方法是什么?_Python_Debugging - Fatal编程技术网

让Python代码第一次运行的好方法是什么?

让Python代码第一次运行的好方法是什么?,python,debugging,Python,Debugging,我的代码中有不少错误。因此,我希望能够在开始时将它们最小化,或者在代码执行之前看到尽可能多的错误。这可能吗?如果可能的话,我该怎么做呢?Python提供了一个调试器,允许您单步执行代码、检查变量并对其进行操作。请参阅可以引导您完成步骤的 另外,请查看python标准库参考以了解pdb 尽早测试,经常测试 这并不一定意味着首先跳入测试驱动的设计池(尽管这不是一个坏主意)。它只是意味着,一旦你有了有效的东西,就要测试你的对象和方法。不要等到有了一大堆代码之后才进行测试 花些时间学习测试框架。如果输入

我的代码中有不少错误。因此,我希望能够在开始时将它们最小化,或者在代码执行之前看到尽可能多的错误。这可能吗?如果可能的话,我该怎么做呢?

Python提供了一个调试器,允许您单步执行代码、检查变量并对其进行操作。请参阅可以引导您完成步骤的

另外,请查看python标准库参考以了解pdb
尽早测试,经常测试

这并不一定意味着首先跳入测试驱动的设计池(尽管这不是一个坏主意)。它只是意味着,一旦你有了有效的东西,就要测试你的对象和方法。不要等到有了一大堆代码之后才进行测试


花些时间学习测试框架。如果输入测试用例对您来说很简单,那么您更有可能这样做。如果您没有任何类型的框架测试,那么测试可能是一种痛苦,因此您可以避免它。所以,尽早养成一些好习惯,这样你就不会有太多问题了

python-m pdb yourcode.py应该这样做。 或者,您可以在代码中“导入pdb”,并使用pdb.set_trace()设置断点。
有关更多信息,请参阅手册:

自由地使用assert语句。

如果语法有问题,可以尝试使用语法突出显示的编辑器。在你对一种语言有了感觉之前,简单的错误不会突然出现在你面前

最简单的调试形式就是插入一些打印语句。更高级(且可扩展)的方法是使用std库中的模块

交互式解释器是处理python代码的极好工具,是对内置REPL(Read-Eval-Print循环)的极大改进

如果您确实希望单步执行代码,则会调用python调试器,该调试器可以从命令行调用,也可以嵌入到代码中


如果您习惯于完全集成的IDE,我建议您将Eclipse与pydev结合使用,PyCharm提供了一个很好的商业产品,它具有自动完成、快速访问文档和许多快捷方式,以及许多其他有趣的功能。

所有真正酷的东西都可以在交互式解释器中轻松演示。我认为这可能是优秀设计的“黄金标准”:

你能以互动方式练习你的课程吗?

如果你能以交互方式做一些事情,那么你就可以自信地编写单元测试和doctest,它是可测试的、简单的、可靠的

而且,更重要的是,您可以交互地探索它。没有什么比输入代码并准确地看到所发生的事情带来的即时满足更好的了

编译语言习惯(写一堆东西,调试一堆东西,测试一堆东西)可以被抛在脑后。相反,你可以写一点东西,探索它,写一个正式的测试,然后将你的一点东西附加到你不断增长的最终项目中


你仍然在做总体设计。但是,您不会浪费时间编写可能有效或可能无效的代码。在Python中,您可以编写有效的代码。如果你不确定,你可以交互地玩它,直到你确定为止。然后编写有效的代码。

在执行之前识别错误是静态检查/分析的领域。我很幸运地使用它对Python代码进行了基本的静态检查


pycheesecake站点有一个非常适合Python的工具。

以下是一些有助于Python调试的技术:

  • 使用交互式shell,例如。Python是一种动态语言,您可以在键入代码时浏览代码。shell始终在编辑器的第二个窗口中运行

  • 将shell中的粘贴复制到docstrings中,该代码演示了函数(类、模块)的主要用法和特殊情况
    doctest.testmod()
    放置在
    中,如果
    部分允许测试模块中的所有docstring,则将放置在
    中。可以很容易地与集成

  • 对永远不会发生的事情使用
    assert

  • print()
    可以解决很多调试问题;模块适用于长期存在的python进程

  • 编写测试(不一定在代码之前),经常运行测试(自动或最多一次按键);为提供扩展的测试发现和运行功能

  • 偶尔跑步

在这一点上,正式的python调试器有点用处。
是一个外部多平台GPL的GUI python调试器,如果您需要的话。

我将python设置为在出现未捕获异常时自动启动调试器,使用。这样,您就可以轻松地检查程序的状态,而无需太多日志代码。(另外,给我发一封信。)

哦,这样你就可以通过添加

if answer == 42:
    1/0 

通常,我只是使用一堆打印语句

page = grabpage(url)
print "Page content:", page
print "page type():", type(page)
有时做一些事情很有用,比如:

debug = True
if debug: print "page content", page
…通过将debug变量更改为False,您可以快速禁用所有调试打印语句

虽然打印调试在大多数情况下会让您走得很远,但有时很难调试循环或一系列if/else/try/except/etc。为此,可以单步调试代码并设置断点的调试器非常有用

pdb
包含在Python中。这是一个很好的简单教程。您甚至可以在运行时更改变量(本教程将介绍这一点)。可以找到更长的教程

有一个相当于pdb的非常好的GUI-

基本上,您运行
winpdb myscript--arg 4-b4
,然后它在终端中加载命令,在左侧显示您的代码、当前值、本地/全局变量列表(及其值)和当前调用堆栈

然后,您可以通过单击步骤(或F6)逐步完成代码。