我试图找出-t和-tt做的选项。
来自doc:
当源文件混合标签和空格以进行缩进时,发出警告,使其依赖于以空格表示的标签的价值。选项被给出两次(-tt)时发出错误。
我没有得到它,特别是粗体句,这是什么意思?标签是一个标签(' \ t')空格是一个空格(''),在ascii表格中,它们还有2个不同的代码。
我要做一个例子来更好地解释自己。我编码:
if True:
print('hello') # here a tab that my editor represents with 4 spaces
print('world') # here just used 4 spaces
现在这个代码,我试过,既不在Python3也不在Python2中工作,那么-t做什么?
你能澄清一下吗?答案 0 :(得分:9)
当用作缩进时,制表符必须被解释为等效于多个空格。 许多空间的方式取决于您如何配置编辑器,以及同一行上选项卡前面有多少个空格。这是因为标签代表跳转到下一个标签停止。如果您使用了2个空格加上一个制表符,则表示您已跳转到第8列,就像插入了6个空格一样。
此外,有些人将他们的tabstops设置为相当于4个空格,其他人将其设置为与8个空格相同。然后这些人也以不同的方式在缩进中使用制表符。您可以为一个缩进级别使用4个空格,然后使用8个空格处的制表符,然后使用制表符加4个空格等。或者您可以使用制表符表示所有缩进级别,将制表符大小设置为表示4个空格。
Python需要处理标签和空格的混合,然后希望你一直使用它;例如你没有先使用4个空格,然后一个标签缩进你认为是相当于12个空格的缩进。当你不一致时,Python很容易弄错。
-t
和-tt
选项通过对所有行进行更严格和彻底的测试来指出您可能错误的地方。
Python Style Guide (PEP 8)强烈建议您仅使用 p>
空格是首选的缩进方法。
选项卡应仅用于与已使用选项卡缩进的代码保持一致。
在Python 3中,混合标签和缩进空格现在是一个错误。
准确地说:Python首先假设您为选项卡使用了8个空格。请参阅 Lexical Analysis 规范的一部分Indentation documentation:
首先,标签被替换(从左到右)一到八个空格,使得直到并包括替换的字符总数是八的倍数(这与Unix使用的规则相同) )。然后,第一个非空白字符前面的空格总数确定行的缩进。缩进不能使用反斜杠在多个物理行上分割;直到第一个反斜杠的空格决定了缩进。
Python 2还会查找Emacs和VI风格的配置注释;如果标记生成器在其中找到包含tab-width:
,:tabstop=
,:ts=
或set tabsize=
的评论,后跟数字,例如:
# -*- tab-width: 4 -*- (emacs)
# :tabstop=4 (vi)
或类似的变体,然后Python从中设置tabsize。此支持已从Python 3中删除。
如果然后混合可能不一致的标签和空格,并使用-t
,则文本<filename>: inconsistent use of tabs and spaces in indentation
会针对该文件写入sys.stderr
一次。如果您使用-tt
,则会引发TabError
exception。
答案 1 :(得分:0)
当源文件依赖于扩展到一定数量空格的选项卡时,将引发错误。
例如,像这样的文件会有问题:
def function():
print 'hello'
\tprint 'goodbye'
如果选项卡是4个空格,上面的代码将起作用,但如果是其他任何内容则会失败(除了0,这是无意义的)。
-t
选项会尝试突出显示此类问题。