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

自2008年以来,调试器情况发生了很大变化。这里有一个Python调试器列表:wiki.python.org/moin/PythonDebuggers

该列表移至wiki.python.org/moin/PythonDebuggingTools

Thonny(thonny.cs.ut.ee)有一个很好的初学者友好的调试器

如果您遇到语法问题,可以尝试使用语法高亮显示的编辑器。在你对某种语言有所了解之前,简单的错误不会只是突然出现在你面前。

最简单的调试形式就是插入一些print语句。更高级(和可扩展)的方法是使用std lib中的日志记录模块。

交互式解释器是使用python代码的绝佳工具,而IPython是对内置REPL(读取评估打印循环)的重大改进。

如果您真的想要单步调试代码,则python调试器称为pdb,可以从命令行调用,也可以嵌入代码中。

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

那么PyLint呢?

对于测试程序,IPython比Python shell更方便:它有%run命令,自动调试器触发等。

在Windows上,PTVS是一个很好的选择。您可以获得Visual Studio的自动完成,调试+断点,中断异常的体验,如果在运行脚本之前检测到语法错误,它会发出警告,当然还有交互式窗口。

以下是一些便于在Python中进行调试的技巧:

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

从shell复制粘贴到docstrings中的代码,用于说明函数(类,模块)的主要用法和极端情况。 doctest.testmod()放在if __name__=="__main__"部分允许测试模块中的所有文档字符串。 doctest可以很容易地与unittest集成。

使用assert来寻找永远不会发生的事情。

print()可以解决许多调试问题; logging模块适用于长寿python进程。

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

偶尔跑pylint。

此时,正式的python调试器有一点用处。

如果需要,Winpdb是一个外部多平台GPL的GUI python调试器。

IPython +1。

@J.F.Sebastian安装pylint已经改变了linux上的包管理器安装pylint或pip install pylint。更简单!请参阅pylint.org

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

你能以交互方式锻炼课程吗?

如果你可以交互式地完成工作,那么你可以自信地编写单元测试和doctests,它是可测试的,简单的,可靠的。

而且,更重要的是,您可以以交互方式进行探索。没有什么比通过输入代码并确切地看到发生了什么而获得的即时满足感更好。

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

你仍然做整体设计。但是你不要浪费时间编写可能会或可能不会工作的代码。在Python中,您可以编写有效的代码。如果你不确定,你会以交互方式玩它,直到你然后你编写有效的代码。

那是很多东西。

@ e-satisf:太多的东西。写测试的东西。测试更少的东西。少花点钱。以更好的态度来享受当天的啤酒。

我是python的新手,并且一直在尝试几种不同的调试器。以下是我到目前为止遇到的选项:

Eclipse与Pydev - 如果你已经在使用eclipse,这可能就是你要走的路。调试器运行良好,功能非常强大。

Komodo IDE - 轻量级的Python IDE。基本上是文本编辑器+调试器。很容易找到并立即提高工作效率。

WinPDB - 接下来尝试这个。看起来很有特色,我可以使用我选择的任何编辑器。

PDB - 自从我读到WinPDB是一个更好的选择之后,还没有尝试过。

带有%run命令的Ipython - 我使用过IPython,但不是像这样的调试器。我需要尝试一下。 (感谢提示,EOL)

Eric IDE - 也在列表中尝试。

老派打印,断言语句 - 简单,有用,但不是完整的解决方案。

内存调试 - 为了调试内存问题,我遇到了一些工具:

objgraph - 将生成参考图的png。整齐。还有其他功能,例如:import objgraph; print(objgraph.show_most_common_types(limit = 10))将打印内存中排名前10位的最常见类型。

gc模块 - 直接与垃圾收集器交互。

heapy - 堆分析器。例如:来自guppy import hpy; hp = hpy(); print(hp.heap())将打印最常见的类型,它们的内存使用情况等。

这是一个非常不完整的列表,但希望这是一个良好的开端。

Python提供了一个调试器,允许您逐步执行代码,检查变量并对其进行操作。请参阅http://pythonconquerstheuniverse.wordpress.com/category/python-debugger/,它可以带您完成这些步骤......

另请检查pdb的python标准库引用

http://www.python.org/doc/2.5.2/lib/module-pdb.html

尽早测试并经常测试。

这并不一定意味着首先跳入测试驱动的设计池头(虽然这不是一个坏主意)。它只是意味着,只要你有一些有效的东西,就测试你的对象和方法。在进行测试之前,不要等到你有大量的代码。

花一些时间学习测试框架。如果您输入测试用例很简单,那么您更有可能这样做。如果你没有任何类型的框架测试可能会很痛苦,所以你会避免它。所以,尽早建立一些好习惯,你将会遇到更少的问题。

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

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

做以下事情有时很有用:

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

..通过将调试变量更改为False,您可以快速禁用所有调试打印语句。

虽然在大多数情况下打印调试会让你走得很远,但有时很难调试循环或一系列if / else / try / except / etc之类的东西。对于这个允许单步执行代码并设置断点的调试器很有用。

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

有一个非常好的GUI等效的pdb - Winpdb

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

然后,您可以通过单击Step(或F6)来逐步执行代码。 F5运行代码。如果单击行号旁边的,则会设置一个断点,代码将自动跳转(当您按下运行时)。

我发现它更容易使用,并且它有许多附加增强功能(如远程调试,因此您可以在待调试的应用程序中运行后端部分(rpdb2),并将Winpdb连接到它(加密)。它还支持不在PDB中的线程和其他有用的东西。你也可以访问类似pdb的控制台。

关于Winpdb的好消息,thx

我设置Python以在有未捕获的异常时使用此技巧自动启动调试器。这样,您可以轻松地检查程序的状态,而无需太多的日志记录代码。 (另外,向我发送一个低吼通知。)

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

if answer == 42:
1/0

使用'raise Exception'或'raise Exception('blah不应该是42,它是%s"%(blah))'会更多Python'y ..

我同意:)但是1/0只在三次击键中做同样的事情。

1/0的+1:这就是我一直使用的。 :)

自由地使用断言语句。

eclipse的PyDev插件是我的首选工具。它识别简单的语法错误和缩进错误,并用红线突出显示错误。它有一个功能强大的调试器,甚至有一个名为PyLint的插件,它会警告你有关危险的代码。

编辑:

它还具有关于运行时错误,部分自动完成和一些其他漂亮功能的用户友好堆栈跟踪。

再次编辑:

我没有注意到顶部帖子中提到了pydev。我希望我带来了别的东西。

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

pycheesecake网站对Python的测试工具有很好的总结。

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

http://blog.jetbrains.com/pycharm/files/2011/05/template-debug2.png

aardio 执行python代码_python

有一个非常好的Python调试器,叫做Winpdb。试一试。建立在wxWidgets库和多平台上。

python -m pdb yourcode.py应该这样做。

或者,您可以在代码中"导入pdb"并使用pdb.set_trace()来设置断点。

有关详细信息,请参阅手册:http://www.python.org/doc/2.5.2/lib/module-pdb.html

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

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

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

更一般地说,正如其他一些答案中所提到的,一个好的Python shell是你的朋友。 IPython是你最好的朋友。 :)