Python与C ++中的警卫评估

时间:2015-11-27 06:10:07

标签: python c++

就在最近,我经历了我的一个代码(在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

现在我有两个问题:

  1. 我认为类似的情景本来是最好的 C ++ ,因为它编译代码并且最初会产生警告。让 我知道我在这里错了吗?
  2. 其他问题是我们使用py_compile.compile('file_name')和它 只是验证语法。我们没有Python中可以捕获的任何模块 这些未命中?

1 个答案:

答案 0 :(得分:0)

由于python是一种松散类型的语言,因此分析变量类型的代码变得困难(我不可能)。我们可以使用pep8pylint来分析代码。他们只能按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的保护表达式。