【问题标题】:Python : Check for runtime errorsPython:检查运行时错误
【发布时间】:2010-03-18 02:06:54
【问题描述】:

我写了一个 python 模块。运行 python filename.py,只检查语法错误。是否有一个工具可以检查运行时错误,例如将 int 与字符串连接等。

谢谢
巴拉

更新: 脚本主要是关于在云中建立一个 hadoop 集群。我不确定如何编写单元测试,因为一切都在云中运行。您可以将代码视为遗留代码,我只是在几个地方添加了更多日志记录和一些额外条件

【问题讨论】:

    标签: python compilation


    【解决方案1】:

    传统上,如果不编写成熟的单元测试和/或文档测试(编写大量测试当然是最佳实践!),至少在每个模块中放置一个 def main(): 函数来练习它并结束带有

    的模块
    if __name__ == '__main__':
      main()
    

    所以如果模块刚刚导入,main() 不会妨碍您,但如果您将该模块作为主脚本运行,它将执行。当然,您需要从main() 中实际运行模块中的代码,以便捕获各种语义问题,例如您提到的类型错误——以这种方式完成非常彻底的工作通常与编写一样难真正的单元测试和文档测试会是,但你至少可以开始!

    【讨论】:

    • 我认为 main 应该调用 test() 因为我见过人们这样做: import xyz; xyz.test()
    • 或者更确切地说:if __name__ == '__main__': test()
    • 我更喜欢统一使用名称main 作为主脚本调用模块时执行的主函数,无论其目的是什么(老式测试或其他),但我已经从未在样式指南中看到过这个特定问题。
    • GAE 应用缓存也取决于它被称为main。遵守约定的另一个原因
    【解决方案2】:

    您可以为您的模块编写单元测试。这样,它将执行您的代码,并且将报告任何运行时错误(甚至更好的是,测试失败)。

    如果您选择走这条路,http://docs.python.org/library/unittest.html 可能是一个不错的起点。或者,正如 Alex 所写的那样,您可以将代码放在模块的底部,当模块直接运行时将执行该代码。这是更方便的方法,可能是更好的第一种方法,但如果您有很多模块,您可能需要更结构化的方法。

    【讨论】:

    • 脚本主要是关于在云中建立一个hadoop集群。我不确定如何编写单元测试,因为一切都在云中运行。您可以将代码视为遗留代码,我只是在几个地方添加了更多日志记录和一些额外条件。
    【解决方案3】:

    你可以试试pyanalyze。它能够在不运行程序的情况下检测可能的运行时错误。

    pip3 install pyanalyze
    python3 -m pyanalyze file.py
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      • 2011-03-10
      • 2014-08-04
      • 2013-06-23
      相关资源
      最近更新 更多