我是一名经验丰富的程序员,但在python中仍然有点绿色。我刚刚被缩进错误抓住了,这花费了我大量的调试时间。我想知道经验丰富的python程序员做了什么来避免一开始就产生这样的问题。
这是代码(更大程序的一部分):
class Wizvar():
def select(self):
self.selected = True
def unselect(self):
self.selected = False
value = None
问题是'value = None'应该缩进一级。实际上,每次调用unselect方法时,变量都会被破坏,而不是只变一次。我多次盯着这看,却没看错。
答案 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)可能会指出这些错误,但我对这些错误没有多少经验。正如我所写,它大部分时间都有效。