【发布时间】:2018-03-06 13:38:47
【问题描述】:
在教朋友 python 时,我遇到了一个涉及缩进问题的奇怪案例。
以下是我正在使用的一段代码
while 1:
a = raw_input("input: ")
if not a:
break
values = a.split()
print values
所以问题是朋友使用制表符缩进前 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解释器中的制表符和空格之战我错过了什么
【问题讨论】:
-
第二部分正在被执行,但它在循环之外,所以只执行一次,用于最终输入。
-
@jonrsharpe 因为它与缩进级别匹配,我认为它在正确的缩进级别。如果我错了,你能解释一下吗?
-
好吧,如果你没记错的话,你肯定会看到预期的输出吗?你看到的输出告诉你它是如何被解释的
-
AFAIK,Python 将制表符解释为不是四个,而是八个空格,因此从技术上讲,该代码应该在
break之后,即无法访问。这也是它对我的表现,例如当我用pass替换break时。 -
@tobias_k 这不是真的,无论如何都无关紧要 - 有一个错误是您在单个 python 源代码文件中有制表符和空格。
标签: python python-2.7