<p><strong>单元测试</strong></p>
<p>这就是为什么存在单元测试。尝试使用小的“示例数据”<code>pyunit</code>,或者使用非常简单的函数<code>doctest</code>。在</p>
<p><strong>小型测试程序</strong></p>
<p>如果出于某种原因你真的需要交互性,我通常编写一个交互式的小程序,作为一个有效的单元测试。在</p>
<pre><code>def _interactiveTest():
...
import code
code.interact(local=locals())
if __name__=='__main__':
_interactiveTest()
</code></pre>
<p>如果只测试某个特定的部分,通常可以忽略加载主程序的大块;根据需要调整体系结构,以避免初始化程序中不需要的部分。这就是为什么人们会说“让你的程序更模块化”,这就是模块化的意思:程序的小部分独立,让你重用它们或者(在这种情况下)单独加载它们。在</p>
<p><strong>在程序中调用解释器</strong></p>
<p>您还可以在程序中的任何时候,下拉到一个解释器中,并传入局部变量(如上所示)。这有点像“穷人的调试器”,但我觉得它足够有效。=)</p>
<p><strong>单片算法</strong></p>
<p>去过那里,做了。有时候,你的工作流程无法进一步模块化,事情开始变得难以处理。在</p>
<p>你建立检查点的直觉是非常好的,我也使用这个直觉:如果你在一个解释器环境中工作,或者嵌入一个解释器,你就不必像重新运行脚本那样频繁地处理这个问题。序列化数据<em>可以</em>工作,但它会带来从磁盘读写的大量开销;您希望数据集保留在内存中。然后您可以做类似<code>test1 = algorithm(data), test2 = algorithm(data)</code>(这假设您的算法不是一个就地算法;如果是,请在每次测试之前使用“写入时复制”或复制数据结构)。在</p>
<p>如果您在尝试了以上所有方法后仍有问题,那么您可能是:</p>
<ul>
<li>使用真实的数据集;你应该只是一个较小的测试数据集来进行原型设计!在</li>
<li>使用效率低下的算法。在</li>
</ul>
<p>作为最后的手段,您可以对代码进行概要分析以找出瓶颈。在</p>
<p><strong>其他</strong></p>
<p>可能有强大的python调试器。我想日蚀有一个。在</p>
<p>另外,我个人会避免使用<code>reload <modulename></code>,我发现这会让人头疼,而不是解决问题。在</p>