就在最近,我经历了我的一个代码(在Python中),其中后卫评估被严重遗漏。我缩短了我的代码,使其成为一个简短的代码
>>> x = 4
>>> y = 0
>>> x >= 1 and (x/y) > 2
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
x >= 2 and (x/y) > 2
ZeroDivisionError: integer division or modulo by zero
这里我们需要添加警卫
>>> x >= 1 and y != 0 and (x/y) > 2 # y!=0 is a guard
False
现在我有两个问题:
py_compile.compile('file_name')
和它
只是验证语法。我们没有Python中可以捕获的任何模块
这些未命中?答案 0 :(得分:0)
由于python是一种松散类型的语言,因此分析变量类型的代码变得困难(我不可能)。我们可以使用pep8
或pylint
来分析代码。他们只能按PEP
告知我们有关缩进和代码编写的信息。
对于以下文件 guard_eval.py
sherry@Sherry-Linux:~$ cat guard_eval.py
x=6
y=0
if x >= 1 and (x/y) > 2:
print True
else:
print False
sherry@Sherry-Linux:~$ pep8 guard_eval.py
guard_eval.py:1:2: E225 missing whitespace around operator
guard_eval.py:2:2: E225 missing whitespace around operator
guard_eval.py:4:1: W191 indentation contains tabs
guard_eval.py:6:1: W191 indentation contains tabs
pylint也提供代码评级:)
但是在C ++的情况下,我们可以将编译器修改为analyze code with the variable type
,并在编译时提示用户使用integer/integer division
的保护表达式。