Python没有抛出缩进错误,但没有执行代码

时间:2018-03-06 13:38:48

标签: python python-2.7

在教朋友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解释器中标签和空格的争夺缺少什么

1 个答案:

答案 0 :(得分:4)

Python 2只有一个标签解释:它们相当于八个空格,总是(你的IDE可能会把它们显示为其他东西,但是Python和你的IDE并不是在说话方面)。知道了,你的最终陈述显然不在循环体内。

Python 3没有这个问题;如果你混合制表符和空格,它会引发一个SyntaxError(拒绝猜测的诱惑,根据Python的禅[import this])。我建议配置您的编辑器以使文字标签显示不同(例如在vimset listchars=tab:~>,trail:#set list显示标签和尾随空格作为字符),当然,配置它自动扩展新插入的标签(例如set expandtab),而不仅仅将它们解释为四个空格(实际上,将它们解释为八个空格可以让您更准确地解释Python 2将如何看到它)。

或者,invoke the Python 2 interpreter with -t or -tt制作混合制表符和空格警告(-t)或错误(-tt),以使这类问题更容易消除。