我正在编写一些机器学习代码,今天由于简单的错误,我损失了大约6个小时。
是这样的:
numpy.empty(100,100)而不是
numpy.empty([100,100])因为我不太习惯numpy,所以我忘记了括号。代码愉快地处理了数字,最后,就在将结果保存到磁盘之前,它在该行上崩溃了。
为了更好地理解,我在shell中的远程机器上编写代码,所以IDE并不是一个真正的选择。而且我怀疑IDE会发现这一点。
以下是我已经尝试过的:
pylint -好的pylint有点工作。在我禁用了除错误和警告之外的所有内容之后,它甚至似乎是有用的。但是pylint在导入模块方面有严重的问题。正如在官方bug跟踪器上看到的,开发人员知道这一点,但不能/不会做任何事情。有人建议解决这个问题,但忽略整个模块对我的情况没有帮助。pychecker --如果我用我所犯的错误创建代码片段,pychecker会报告错误--与python解释器相同。但是,如果我在实际源文件(~100 LOC)上运行pychecker,它会报告其他错误(未使用的vars、未使用的导入等);但错误的numpy行被跳过。最后,我尝试了pyflakes,但是它所做的检查甚至比pychecker/pylint组合的还要少。
那么,有什么可靠的方法可以预先检查代码吗?而不是真的运行它。
发布于 2014-02-28 19:17:04
具有更强类型检查的语言可以将您从此特定错误中拯救出来,但通常不会从错误中拯救您。有很多方法可以通过静态类型检查来出错。因此,如果需要很长时间的计算,那么采取以下策略是有意义的:
C!我要再做一次A的反演吗?如果我打电话给pdb.pm,就不会了:
导入pdb >>> pdb.pm() >q22080243.py(6) ->返回B.dot(C) (Pdb) B数组([-0.01129249,0.06886091,.,0.08530621,-0.03698717,0.02586344,-0.04872148,……,-0.04853373,0.01089163,.,.,-0.11463087,0.15048804,.,0.0722889,-0.12388141,-0.00467437,-0.13650975,.,-0.13894875,0.02823997])
现在,与Lisp不同的是,我不能只做正确的事情并继续执行。但至少我可以恢复中间结果:
(Pdb) D= B.dot(C.T) (Pdb) numpy.savetxt('result.txt',D)发布于 2014-02-27 22:31:51
你用单元测试吗?没有更好的办法了。
https://stackoverflow.com/questions/22080243
复制相似问题