我一直在阅读PEP 8,但我不明白为什么Python3很难用这个错误信息来挑出标签和空格。
TabError:缩进中标签和空格的使用不一致
我理解一致性的重要性,但是暂停执行的错误消息似乎极端,特别是因为混合选项卡和空格对编译器没有任何影响,大多数优秀的编辑器都支持制表符/空格转换。最重要的是,Python3没有你忽略其他PEP约定的问题(例如使用三个空格缩进而不是四个),你甚至都不会收到它的警告信息。
那么交易是什么,为什么Python3突然间会把混合空间和标签视为最终的邪恶?
答案 0 :(得分:2)
你可以很好地混合python文件中的标签和空格(虽然PEP8说你不应该这样做。)
(Stackoverflow将标签打印为4个空格,this gist中的示例标签正确;请自行测试!)
这是一个非常有效的python函数:
def foo():
print("one tab") # all indentation is one tab.
if True:
print("two spaces")
else:
print("four spaces")
你不能做的是在同一个区块中混合标签和空格 :
def foo():
print("one tab")
print("eight spaces")
这会产生TabError
。
即使这些内容在您的文本编辑器中排列。
这是因为(大致)他们可能在其他人的文本编辑器中排列不同,看起来像是一个不同的过程。举一个愚蠢的例子:
def foo():
while True:
"we should exit immediately"
return True # suppose this was tab indented
最后一行可能看起来像是与字符串对齐,因此会立即返回,但由于它的标签缩进,或许它与while排列(因此while循环永不退出)。 ???
这里存在歧义,因此解析器说不。
但是,PEP8说你应该总是使用4个空格,避免这种歧义。