你用什么技巧来避免被python空格语法绊倒?

时间:2010-08-15 16:33:26

标签: python syntax

我是一名经验丰富的程序员,但在python中仍然有点绿色。我刚刚被缩进错误抓住了,这花费了我大量的调试时间。我想知道经验丰富的python程序员做了什么来避免一开始就产生这样的问题。

这是代码(更大程序的一部分):

class Wizvar():

    def select(self):
        self.selected = True

    def unselect(self):
        self.selected = False

        value = None

问题是'value = None'应该缩进一级。实际上,每次调用unselect方法时,变量都会被破坏,而不是只变一次。我多次盯着这看,却没看错。

3 个答案:

答案 0 :(得分:8)

将所有类属性(例如value)放在顶部,位于class Wizvar声明下方(文档字符串下方,但高于所有方法定义)。如果始终将类属性放在同一位置,则可能不会经常遇到此特定错误。

请注意,如果您遵循上述惯例并写了:

class Wizvar():
        value = None

    def select(self):
        self.selected = True

    def unselect(self):
        self.selected = False

然后Python会引发一个IndentationError:

% test.py
  File "/home/unutbu/pybin/test.py", line 7
    def select(self):
                    ^
IndentationError: unindent does not match any outer indentation level

答案 1 :(得分:1)

一般来说:很多单元测试。代码审查也有很多帮助。

这个特定错误似乎很容易识别,因为如果value一旦它是一个类变量就应该缩进,那么适当的单元测试会发现它不是这种情况。< / p>

PyDev这样的工具可以很好地找到其他常见错误,因此您可能需要考虑这些错误。

答案 2 :(得分:1)

我没有这样的问题;)至少我没有多余的,缺少或错位的支架或经典:

if (foo) 
    bar();
    baz();

使用大括号的语言。

话虽如此,某些编码风格有所帮助。例如,我总是在类主体的顶部列出类变量,所以如果我不小心缩进,我将得到一个IndentationError而不是创建一个未使用的局部变量。顺便说一下,我总是这样看。一致的缩进(我使用PEP 8并使用4个空格)也有帮助,有些人只使用一个空间用于某些块 - 这很容易被忽视。

静态代码分析(如PyLint)可能会指出这些错误,但我对这些错误没有多少经验。正如我所写,它大部分时间都有效。