为什么" Else"声明仍然打印即使" IF"嵌套for循环

时间:2017-02-02 10:21:16

标签: python python-2.7

为什么我的" ELSE"即使我的" IF"永远是真的

我有一个数组,其中我试图搜索其中是否有子字符串。当它具有该子字符串时,它应该使用if和elif语句运行另一个for循环

test = ['SCHEDULE:1457H', 'SCHEDULE:1550H', 'SCHEDULE:1740H', 'SCHEDULE:1705H']
task = ['ST:124', 'BROWSE:testB', 'DOWNLOAD:DLthis', 'REJECT:rejectme', 'APPROVE:goodtoGo', 'ST:123']

while time.time() < t_end:
    index = 0 
    for n in test:
        if "1457H" in n:
            for item in task:
                if "ST" in task[index]:
                    print(task[index])
                    index += 1
                    time.sleep(2)
                elif "LOGIN" in task[index]:
                    print(task[index])
                    index += 1
                elif "BROWSE" in task[index]:
                    print(task[index])
                    index += 1
                elif "DOWNLOAD" in task[index]:
                    print(task[index])
                    index += 1
                elif "REJECT" in task[index]:
                    print(task[index])
                    index += 1
                elif "APPROVE" in task[index]:
                    print(task[index])
                    index += 1

    else:  
        print("Sleeping")
        time.sleep(2)


Results:

ST:124
BROWSE:testB 
DOWNLOAD:DLthis 
REJECT:rejectme
APPROVE:goodtoGo
ST:123
Sleeping

然后因为while循环再次重复它。我无法弄清楚为什么&#34; ELSE&#34;声明仍然打印。我试着修复&#34; ELSE&#34;的标签空间。声明,它仍然打印,甚至比目前的结果更糟糕。

1 个答案:

答案 0 :(得分:4)

您正在混合代码中的制表符和空格。 不要这样做。您的编辑器设置为将标签扩展为4个空格,而Python将标签扩展为 8个空格。对于你的代码,有些行只使用制表符,有些行只使用空格,有些行看起来像 mix 制表符和空格,就Python而言,这导致了一组完全不同的缩进块

else分支缩进以匹配 for循环,而不是if测试。这意味着else块始终在没有for语句的情况下完成break循环时运行,而不是在if测试失败时运行。

将您的编辑器配置为在缩进时仅使用空格,并将所有选项卡替换为4个空格,并且您的代码将正常工作。