Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解Python解释器-t(-tt)选项_Python_Python 2.7_Tabs_Indentation - Fatal编程技术网

了解Python解释器-t(-tt)选项

了解Python解释器-t(-tt)选项,python,python-2.7,tabs,indentation,Python,Python 2.7,Tabs,Indentation,我想弄清楚选项-t和-tt的作用 从文档: 当源文件混合制表符和空格进行缩进时发出警告,使其取决于以空格表示的制表符的值。当选项被赋予两次(-tt)时发出错误 我不明白,尤其是粗体的句子,它是什么意思?制表符是制表符('\t')空格是空格(''),在ascii表格中,它们也有两个不同的代码 我要举个例子来更好地解释我自己。I代码: if True: print('hello') # here a tab that my editor represents with 4 spaces

我想弄清楚选项-t和-tt的作用

从文档:

当源文件混合制表符和空格进行缩进时发出警告,使其取决于以空格表示的制表符的值。当选项被赋予两次(-tt)时发出错误

我不明白,尤其是粗体的句子,它是什么意思?制表符是制表符('\t')空格是空格(''),在ascii表格中,它们也有两个不同的代码

我要举个例子来更好地解释我自己。I代码:

if True:
    print('hello') # here a tab that my editor represents with 4 spaces
    print('world') # here just used 4 spaces
我试过,这段代码在Python3和Python2中都不起作用,那么-t做什么呢


您能给我一个澄清吗?

当用作缩进时,制表符必须被解释为等同于许多空格。空格的数量取决于您如何配置编辑器,以及同一行选项卡前面的空格数量。这是因为制表符表示跳转到下一个制表位。如果使用了2个空格加上一个制表符,则表示跳转到第8列,就像插入了6个空格一样

此外,有些人将其制表位设置为等于4个空格,其他人将其设置为等于8个空格。然后,这些人在缩进中以不同的方式使用制表符。一个缩进级别可以使用4个空格,下一个缩进级别可以使用8个空格的制表符,然后使用一个制表符加上4个空格,等等。或者,在将制表符大小设置为表示4个空格后,可以对所有缩进级别使用制表符

Python需要处理制表符和空格的混合,然后希望您能够始终如一地使用它;e、 你没有先用4个空格,然后用制表符缩进到你认为相当于12个空格的缩进。当您不一致时,Python很容易出错

-t
-tt
选项指出了通过对所有线路进行更严格、更彻底的测试而可能出现错误的地方

在不同的选项卡大小和混合选项卡与空格之间,您很容易产生令人困惑的结果,这就是为什么强烈建议您仅使用空格的原因:

空格是首选的缩进方法

制表符应仅用于与已缩进制表符的代码保持一致

在Python3中,为缩进混合制表符和空格现在是一个错误

确切地说:Python一开始假设一个选项卡使用了8个空格。请参阅词法分析规范的,部分:

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

Python2还寻找Emacs和VI风格的配置注释;如果标记器发现注释中有
选项卡宽度:
:tabstop=
:ts=
设置tabsize=
,后跟数字,如:

# -*- tab-width: 4 -*- (emacs)
# :tabstop=4 (vi)
或者类似的变体,然后Python根据该变量设置tabsize。此支持已从Python3中删除


然后,如果您混合使用可能不一致的制表符和空格,并使用
-t
,则文本
:缩进中制表符和空格的不一致使用将为该文件写入一次
sys.stderr
。如果使用了
-tt
,则会引发a。

当源文件依赖于扩展到一定数量空格的制表符时,将引发错误

例如,这样的文件可能会有问题:

def function():
    print 'hello'
\tprint 'goodbye'
如果一个制表符是4个空格,上面的代码就可以工作,但是如果它是其他任何内容(0除外,这是毫无意义的),那么上面的代码就会失败


-t
选项试图突出显示这些问题。

我编辑了我的问题,因为我还不清楚如何添加。实际上,我们已经去测试了它-t只是在仍然运行代码时给您一个警告,而-tt不运行代码并发出错误。我的建议是,将文本编辑器设置为将所有选项卡扩展到空格,您可以将其作为一个选项“忘记”issue@antox:什么部分不清楚?您的示例在Python3中是一个语法错误,因为您混合了制表符和空格。在Python2中,根据您使用的是
-t
还是
-tt
@antox示例,“/t”+”*2有时等于“*4”,您会收到警告(制表符和空格的使用不一致)或错误(引发a)。因为python在缩进上分离以解释该语言,所以该选项只是警告您ascii代码是否可能被删除misunderstood@MartijnPieters我并不理解,因为-t,-tt,或者它们中的任何一个我总是得到相同的
缩进错误
,那么区别在哪里呢?@antox-这是故意的。因为它可能无法工作,根据
\t
的设置,使用
-t
选项运行python将导致错误。