我的背景是C和C++。我非常喜欢Python,但它有一个方面(以及其他解释语言,我猜)在您习惯于编译语言时很难使用。
当我用python编写了一些东西并达到可以运行它的程度时,仍然不能保证没有任何语言特定的错误存在。对我来说,这意味着我不能仅仅依靠我的运行时防御(对输入、断言等的严格测试)来避免崩溃,因为在6个月内,当一些原本不错的代码最终运行时,它可能会因为一些愚蠢的打字错误而破裂。
显然,应该对系统进行足够的测试,以确保所有代码都已运行,但大多数时候我在内部脚本和小型工具中使用python,这当然不会引起他们需要的QA注意。另外,一些代码是如此简单,如果你的背景是C/C++,那么只要编译它(例如,类内的吸收器方法,通常是成员变量的简单返回),它就可以正常工作。
所以,我的问题很明显——有没有任何方法(使用特殊的工具或其他东西)可以确保我的Python脚本中的所有代码都将“编译”并运行?

最佳答案

看看PyCheckerPyLint
下面是pylint的示例输出,它是由普通程序生成的:

print a

如您所见,它检测未定义的变量,而py-compile(故意)不会。
in foo.py:

************* Module foo
C:  1: Black listed name "foo"
C:  1: Missing docstring
E:  1: Undefined variable 'a'


...

|error      |1      |1        |=          |

简单的例子说明为什么测试不够好,即使它们涵盖了“每一行”:
bar = "Foo"
foo = "Bar"
def baz(X):
    return bar if X else fo0

print baz(input("True or False: "))

编辑:PyChecker为我处理三元:
Processing ternary...
True or False: True
Foo

Warnings...

ternary.py:6: No global (fo0) found
ternary.py:8: Using input() is a security problem, consider using raw_input()

10-01 02:14
查看更多