在教朋友python时,我遇到了一个涉及缩进问题的奇怪案例。
以下是我正在使用的代码
while 1:
a = raw_input("input: ")
if not a:
break
values = a.split()
print values
所以问题是朋友用tab来缩进前4行,即
while 1:
a = raw_input("Input: ")
if not a:
break
然后使用空格缩进剩余的代码。即以下部分
values = a.split()
print values
这段代码没有抛出缩进错误,我猜这是正确的,因为标签是默认创建4个空格。
真正奇怪的是,除非满足中断条件,否则使用空格的部分不会被执行。
即输出如下
输入
Input: 123 123 123
Input: abc abc abc
Input: pqr abc 123
输出
['pqr', 'abc', '123']
预期输出
['123', '123', '123']
['abc', 'abc', 'abc']
['pqr', 'pqr', 'pqr']
为什么会发生这种情况? 我对python解释器中标签和空格的争夺缺少什么
答案 0 :(得分:4)
Python 2只有一个标签解释:它们相当于八个空格,总是(你的IDE可能会把它们显示为其他东西,但是Python和你的IDE并不是在说话方面)。知道了,你的最终陈述显然不在循环体内。
Python 3没有这个问题;如果你混合制表符和空格,它会引发一个SyntaxError
(拒绝猜测的诱惑,根据Python的禅[import this
])。我建议配置您的编辑器以使文字标签显示不同(例如在vim
,set listchars=tab:~>,trail:#
,set list
显示标签和尾随空格作为字符),当然,配置它自动扩展新插入的标签(例如set expandtab
),而不仅仅将它们解释为四个空格(实际上,将它们解释为八个空格可以让您更准确地解释Python 2将如何看到它)。
或者,invoke the Python 2 interpreter with -t
or -tt
制作混合制表符和空格警告(-t
)或错误(-tt
),以使这类问题更容易消除。