Python 打印错误因缩进问题
我正在运行一个插入排序的算法,但它似乎有点问题。于是我尝试加一些打印语句来跟踪运行情况,不过当我加上打印语句后,就出现了缩进错误。有人能解释一下为什么第一段代码没有问题,而第二段代码却出错吗?
第一段代码运行正常:
def isort(self):
for i in range(1, len(self.array)):
temp = self.array[i]
k = i
while k > 0 and temp < self.array[k-1]:
# print self.array[k-1]
self.array[k] = self.array[k-1]
# print "k > 0 and temp < self.array[k-1]"
# print "k: " + k
# print "temp: " +temp
# print "self.array[k-1]: " + self.array[k-1]
k = k-1
self.array[k] = temp
return self.array
错误出现在带有"#*"的行:
def isort(self):
for i in range(1, len(self.array)):
temp = self.array[i]
k = i
while k > 0 and temp < self.array[k-1]: #* indent expected
print self.array[k-1] #* unexpected indent
self.array[k] = self.array[k-1]
# print "k > 0 and temp < self.array[k-1]" #* unindent does not match any outer indention level
print "k: " + k
# print "temp: " +temp
# print "self.array[k-1]: " + self.array[k-1]
k = k-1 #* unexpected indent
self.array[k] = temp
return self.array #* return outside of function
1 个回答
3
你在缩进的时候混用了制表符和空格。
其实你第一个例子(那个能正常工作的)也有混用制表符和空格,不过在这个情况下,它们的使用还算一致:while
这一行是用两个制表符缩进的,而后面所有非注释的行则是用两个制表符加上一些空格缩进的。
在第二个例子中,while
这一行是用两个制表符缩进的,但紧接着的print
这一行却是用全空格缩进的。因此,Python无法判断这一行应该属于哪个代码块。
在Python 2中,你可以使用-t
选项来检查这个问题;而Python 3似乎会自动检查。
>>> python2.6 -t test.py
test.py: inconsistent use of tabs and spaces in indentation
要解决这个问题,你可以进行一次搜索和替换,把所有的制表符替换成4个空格,或者反过来。官方推荐使用四个空格,但对此有一些争论。总之,千万不要混用!