有什么好方法让我的Python代码第一次运行成功?
我在代码中遇到了很多错误。因此,我希望能在一开始就尽量减少这些错误,或者在代码运行之前看到尽可能多的错误。这有可能吗?如果可以的话,我该怎么做呢?
16 个回答
所有那些很酷的东西都可以在交互式解释器中轻松演示。我觉得这可能是好的设计的“黄金标准”:
你能在交互式环境中使用你的类吗?
如果你能在交互式环境中进行操作,那么你就可以自信地写单元测试和文档测试,因为这样可以确保你的代码是可测试的、简单的和可靠的。
更重要的是,你可以在交互式环境中进行探索。没有什么比输入代码后立即看到结果更让人满足的了。
你可以抛弃编译语言的习惯(写很多代码、调试很多代码、测试很多代码)。相反,你可以先写一点代码,进行探索,然后写一个正式的测试,最后把这小部分代码整合到你不断完善的最终项目中。
你仍然需要进行整体设计。但你不会浪费时间去写那些可能有效也可能无效的代码。在Python中,你写的是有效的代码。如果你不确定,就在交互式环境中玩一玩,直到你确定为止。然后你就可以写出有效的代码。
这里有一些技巧可以帮助你在Python中调试代码:
使用交互式命令行,比如ipython。Python是一种动态语言,你可以在输入代码的同时进行探索。我在编辑器的第二个窗口里始终运行着这个命令行。
从命令行复制粘贴一些代码到文档字符串中,这些代码可以展示函数(类、模块)的主要用法和一些特殊情况。使用
doctest.testmod()
放在if __name__=="__main__"
部分,可以测试模块中的所有文档字符串。doctest可以很方便地和unittest结合使用。使用
assert
来检查那些绝对不应该发生的情况。print()
可以解决很多调试问题;而logging模块适合用于长时间运行的Python程序。编写测试(不一定要在写代码之前),并且经常运行这些测试(可以自动运行,或者最多一键运行);nose提供了扩展的测试发现和运行功能,适用于unittest。
偶尔运行一下pylint。
在这个阶段,正式的Python调试器用处不大。如果你需要,可以使用Winpdb,这是一个多平台的开源图形界面Python调试器。
如果你在写代码的时候遇到语法问题,可以试试用带有语法高亮的编辑器。刚开始学习一种编程语言时,简单的错误可能不容易被发现。
最简单的调试方法就是插入一些打印语句。更高级一点的做法是使用标准库中的logging模块,这样可以更灵活地记录信息。
交互式解释器是处理Python代码的一个很棒的工具,而IPython比内置的REPL(读-评-打印循环)有了很大的改进。
如果你想逐步执行你的代码,可以使用Python调试器,叫做pdb,它可以从命令行调用,也可以嵌入到你的代码中。
如果你习惯使用功能齐全的集成开发环境(IDE),我推荐使用带有pydev的Eclipse,或者PyCharm,它有很棒的商业版本,提供自动补全、快速访问文档和许多快捷键等众多有趣的功能。