Python 3中的TabError

Python 3中的TabError,python,python-3.x,Python,Python 3.x,鉴于以下口译员会话: >>> def func(depth,width): ... if (depth!=0): ... for i in range(width): ... print(depth,i) ... func(depth-1,width) File "<stdin>", line 5 func(depth-1,width) ^ TabError: inconsisten

鉴于以下口译员会话:

>>> def func(depth,width):
...   if (depth!=0):
...     for i in range(width):
...       print(depth,i)
...       func(depth-1,width)
  File "<stdin>", line 5
    func(depth-1,width)
                  ^
TabError: inconsistent use of tabs and spaces in indentation
def func(深度、宽度): ... 如果(深度!=0): ... 对于范围内的i(宽度): ... 打印(深度,i) ... func(深度1,宽度) 文件“”,第5行 func(深度1,宽度) ^ TabError:缩进中制表符和空格的使用不一致
有人能告诉我我的代码中的
TabError
是什么吗?

TL;DR:永远不要用TAB缩进Python代码


在Python 2中;也就是说,每个制表符将缩进进一步增加1到8个空格,因此产生的缩进可以被8整除

然而,这不再适用于Python 3-在简化[*]中,制表符只匹配制表符,空格只匹配缩进中的其他空格;也就是说,使用TABSPACESPACE缩进的块可能包含使用TabSpaceTab缩进的块,但如果它包含TABTAB,则会被视为缩进错误,即使该块看起来会进一步延伸

这就是为什么在Python中混合使用制表符和空格,或者使用制表符进行缩进被认为是一种非常糟糕的做法


[*]好吧,我确实躺在那里了——没那么简单。Python3实际上允许在使用TABSPACESPACE缩进的块中使用TabTab缩进的块。从:

2.1.8。压痕

逻辑行开头的前导空格(空格和制表符)用于计算行的缩进级别,而缩进级别又用于确定语句的分组

制表符由一到八个空格(从左到右)替换,这样替换之前(包括替换之后)的字符总数是八的倍数(这与Unix使用的规则相同)。第一个非空白字符前面的空格总数决定行的缩进。不能使用反斜杠将缩进拆分为多个物理行;第一个反斜杠前的空格决定缩进

如果源文件混合了制表符和空格,使其含义取决于空格中制表符的价值,则缩进将被视为不一致而被拒绝;在这种情况下会引发一个TabError


因为即使制表符只有一个空格宽,tabtab的缩进也比TABSPACESPACE深,所以实际上允许缩进。然而,这是如此神秘,你可能想忘记它,只是相信我上面说的。。。或者甚至认为Python根本不允许使用制表符进行缩进。

您在代码中混合了制表符和空格,不要这样做。只使用空格。我在VisualStudio代码中有这个错误,在我开始重新缩进之前,甚至没有显示红线错误。那么,人们通常会将每个空间自定义为等于2个空间吗?我知道在某些语言中,缩进2个空格而不是4个空格已经很常见了。但是,通过纠正事情来浪费时间似乎是荒谬的。我希望Python3能想出一个更好的解决方案。@Azurespot问题在于令人震惊的VisualStudio代码和“I”D“E”一样,而不是Python。