Python 打印错误因缩进问题

1 投票
1 回答
1829 浏览
提问于 2025-04-18 14:52

我正在运行一个插入排序的算法,但它似乎有点问题。于是我尝试加一些打印语句来跟踪运行情况,不过当我加上打印语句后,就出现了缩进错误。有人能解释一下为什么第一段代码没有问题,而第二段代码却出错吗?

第一段代码运行正常:

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个空格,或者反过来。官方推荐使用四个空格,但对此有一些争论。总之,千万不要混用!

撰写回答