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

我在我的代码中出现了很多错误。 因此,我希望能够在开始时尽量减less它们,或者在代码执行之前尽可能多地查看错误。 这是可能的,如果是这样,我该怎么做?

如果您遇到语法问题,可以尝试使用语法突出显示的编辑器。 直到你有了一种语言的感觉,简单的错误不会只是出现在你身上。

最简单的debuggingforms就是插入一些打印语句。 更高级(可扩展)的方法是使用std lib中的日志logging模块。

交互式解释器是使用Python代码的绝佳工具, IPython比内置的REPL(Read Eval Print Loop)有了很大的改进。

如果你真的想要遍历你的代码,pythondebugging器被称为pdb ,可以从命令行调用,或者embedded到代码中。

如果您已经习惯了完全集成的IDE,那么我会推荐在pydev中使用Eclipse,并且PyCharm提供了一个很好的商业产品,包括自动完成,快速访问文档和许多快捷方式以及许多其他有趣的function。

以下是一些在Python中简化debugging的技巧:

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

  • 从shell复制粘贴到docstrings代码中,该代码演示了该函数(类,模块)的主要用法和angular落案例。 doctest.testmod()放置在if __name__=="__main__"部分允许testing模块中的所有文档string。 doctest可以很容易地与unittest整合。

  • 使用assert的东西,永远不会发生。

  • print()可以解决很多debugging问题; 日志logging模块适用于长期生活的python进程。

  • 编写testing(不一定在你的代码之前),经常运行(自动或最多一次按键); 鼻子为unit testing提供了扩展的testing发现和运行function。

  • 偶尔运行pylint 。

在这一点上有一个正式的Pythondebugging器的一点用处。 Winpdb是一个外部的多平台GPL'ed GUI pythondebugging器,如果你需要的话。

在交互式翻译中,所有非常酷的东西都很容易展现出来。 我认为这可能是良好devise的“黄金标准”:

你能交互式地锻炼你的class级吗?

如果你可以交互的做东西,那么你可以自信地写出unit testing和文档testing,简单,可靠。

而且,更重要的是,您可以交互式地探索它。 没有什么比从input代码并确切地看到会发生什么的即时满足更好。

编译后的语言习惯(编写一堆东西,debugging一堆东西,testing一堆东西)可以被抛在后面。 相反,你可以写一些东西,探索它,写一个正式的testing,然后把你的一些东西附加到你最终的项目上。

你仍然做整体devise。 但是,您不要浪费时间编写可能或不可行的代码。 在Python中,你可以编写可用的代码。 如果你不确定的话,你可以互动地玩,直到你确定。 然后你写代码的作品。

我是新来的python,并已尝试几个不同的debugging器。 以下是我迄今为止遇到的选项:

  1. Eclipse与Pydev – 如果你已经使用eclipse,这可能是要走的路。 debugging器工作正常,function非常强大。
  2. 科莫多IDE – 一个轻量级的Python IDE。 基本上是一个文本编辑器+debugging器。 立即找出并且生产很容易。
  3. WinPDB – 下一个尝试这个。 看起来非常有特点,我可以使用我select的编辑器。
  4. PDB – 自从我读到WinPDB是一个更好的select之后,还没有尝试过。
  5. Ipython与%运行命令 – 我已经使用IPython,但不是这样的debugging器。 我需要尝试一下。 (感谢提示,EOL)
  6. 埃里克IDE – 也在列表中尝试。
  7. 老学校打印,断言陈述 – 简单,有用,但不是一个完整的解决scheme。

内存debugging – 为了debugging内存问题,我遇到了一些工具:

  1. objgraph – 将生成参考graphics的png。 整齐。 还有其他一些function,如:import objgraph; print(objgraph.show_most_common_types(limit = 10))将在内存中打印前10个最常见的types。
  2. gc模块 – 直接与垃圾收集器交互。
  3. heapy – 堆分析器。 例如:从guppyimporthpy; hp = hpy(); 打印(hp.heap())将打印最常见的types,其内存使用情况等

这是一个非常不完整的名单,但希望这是一个好的开始。

Python提供了一个debugging器,它允许你遍历你的代码,检查variables并操纵它们。 请参阅http://pythonconquerstheuniverse.wordpress.com/category/python-debugger/ ,它可以带你通过步骤…

同时检查pdb的python标准库参考http://www.python.org/doc/2.5.2/lib/module-pdb.html

提前testing并经常testing。

这并不一定意味着首先跳入testing驱动devise池头(尽pipe这不是一个坏主意)。 这只是意味着,只要你有一些工作,testing你的对象和方法。 在testing之前不要等到你有大量的代码。

投入一些时间来学习testing框架。 如果你input一个testing用例是微不足道的,那么你更有可能这样做。 如果你没有任何types的框架testing可能是一个痛苦,所以你会避免它。 所以,尽早build立一些良好的习惯,你的问题就会减less。

更多的时候,我只是使用一堆打印语句。

 page = grabpage(url) print "Page content:", page print "page type():", type(page) 

这样做有时候会很有用:

 debug = True if debug: print "page content", page 

..用这个,你可以通过改变debuggingvariables为False来快速禁用所有的debugging打印语句。

虽然在大多数情况下,打印debugging会让你感觉很远,但有时很难debugging诸如循环或一系列if / else / try / except /等。 对于这个debugging器来说,允许通过你的代码,并设置中断点是有用的。

pdb包含在Python中。 这是一个很好的简单的教程。 你甚至可以做一些事情,比如在运行期间修改variables(本教程将介绍)。 更长的教程可以在这里find

有一个非常漂亮的GUI相当于pdb – Winpdb

基本上你运行winpdb myscript --arg 4 -b 4然后在terminal上加载命令,在左边显示你的代码,包含当前的本地/全局variables(和它们的值)以及当前的调用 -叠加。

然后你可以点击Step(或者F6)来点击代码。 F5运行代码。 如果您单击行号旁边的单击,它会设置一个中断点,代码将自动步进(当您按运行时)。

我发现使用起来要容易得多,而且它有很多额外的增强function(比如远程debugging),所以你可以在待debugging应用程序中运行后端部分( rpdb2 ),并将Winpdb连接到它(encryption的)。支持不在PDB中的线程和其他有用的东西,你也可以访问类似pdb的控制台。

我设置了Python,当有一个未捕获的exception时使用这个技巧来自动启动debugging器。 这样,您可以轻松地检查程序的状态,而不需要太多的日志logging代码。 (另外,给我一个低吼通知 。)

哦,这样你就可以通过添加在代码中创build一个断点

 if answer == 42: 1/0 

使用断言陈述宽松。

在执行之前识别错误是静态检查/分析的领域。 使用PyChecker进行Python代码的基本静态检查已经很好运了。

pycheesecake网站对Python 的testing工具有一个很好的总结 。

Eclipse的PyDev插件是我select的工具。 它识别简单的语法错误和缩进错误,并用红线标出错误。 它有一个强大的debugging器,甚至有一个名为PyLint的插件,它警告你有关危险的代码。

编辑:它也有一个用户友好的堆栈跟踪运行时错误,部分自动完成和一些其他漂亮的function。

再次编辑:我没有注意到pydev是在顶端的post中提到的。 我希望我带来别的东西在桌子上。

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

Python有非常好的GUIdebugging器Winpdb 。 尝试一下。build立在wxWidgets库和多平台上。

为了获得最完整的体验,您可以使用像PyCharm这样的完整IDE:

2QeaQ.png 在这里输入图像说明

Eric4 IDE还有一个很棒的内置debugging器。

IPython Python shell有一个%pdb命令, 可以在出现问题时自动调用debugging器 。 然后,您可以检查variables,逐步执行代码等。

您可以使用%run命令从IPython 运行程序 。

更一般地说,正如在其他一些答案中指出的那样,一个好的Python shell是你的朋友。 而IPython是你最好的朋友。 🙂