首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查python代码(包括库)?

如何检查python代码(包括库)?
EN

Stack Overflow用户
提问于 2014-02-27 20:59:29
回答 2查看 124关注 0票数 0

我正在编写一些机器学习代码,今天由于简单的错误,我损失了大约6个小时。

是这样的:

代码语言:javascript
复制
numpy.empty(100,100)

而不是

代码语言:javascript
复制
numpy.empty([100,100])

因为我不太习惯numpy,所以我忘记了括号。代码愉快地处理了数字,最后,就在将结果保存到磁盘之前,它在该行上崩溃了。

为了更好地理解,我在shell中的远程机器上编写代码,所以IDE并不是一个真正的选择。而且我怀疑IDE会发现这一点。

以下是我已经尝试过的:

  1. 运行pylint -好的pylint有点工作。在我禁用了除错误和警告之外的所有内容之后,它甚至似乎是有用的。但是pylint在导入模块方面有严重的问题。正如在官方bug跟踪器上看到的,开发人员知道这一点,但不能/不会做任何事情。有人建议解决这个问题,但忽略整个模块对我的情况没有帮助。
  2. 运行pychecker --如果我用我所犯的错误创建代码片段,pychecker会报告错误--与python解释器相同。但是,如果我在实际源文件(~100 LOC)上运行pychecker,它会报告其他错误(未使用的vars、未使用的导入等);但错误的numpy行被跳过。

最后,我尝试了pyflakes,但是它所做的检查甚至比pychecker/pylint组合的还要少。

那么,有什么可靠的方法可以预先检查代码吗?而不是真的运行它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-28 19:17:04

具有更强类型检查的语言可以将您从此特定错误中拯救出来,但通常不会从错误中拯救您。有很多方法可以通过静态类型检查来出错。因此,如果需要很长时间的计算,那么采取以下策略是有意义的:

  1. 在花费几个小时的大数据上运行代码之前,先在小示例(几秒钟或几分钟内运行)上逐个测试代码。
  2. 构造长时间运行的计算,以便将中间结果保存到计算中适当点的磁盘上的文件中。这意味着,当发生故障时,您可以修复问题并从最后一个保存点重新启动计算。
  3. 从交互式解释器中运行代码,这样在出现异常时,您将返回到交互式会话,从而有机会使用死后调试会话恢复数据。例如,假设我有一些长时间运行的计算: 工作(A,C):B= scipy.linalg.inv(A) #当A是大回报B.dot(C)时需要很长时间 我在交互式解释器上运行这个程序,它会引发一个异常:D= work(A,C)回溯(最近一次调用):文件"",第1行,文件"q22080243.py",第6行,工作返回B.dot(C) ValueError:矩阵不对齐 哦不!我忘了转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)
票数 2
EN

Stack Overflow用户

发布于 2014-02-27 22:31:51

你用单元测试吗?没有更好的办法了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22080243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档