Python在“else:”上给出“语法错误”

时间:2015-11-28 17:49:55

标签: python python-3.x syntax-error

我的错误
Python抛出一个语法错误,指向“else:”的最后“e”,前面是 if 语句,并在中而循环。
我的目标
测试某些参数是否为true,如果为true则转到循环的开头,如果不为true,则执行某些语句并递增一个值。
我的源代码

from random import randint

def returnDigRoot(num):
    digs = []
    while len(str(num)) != 1:
        num = str(num)
        for each in num:
            digs.append(each)
        num = int(num)
        digs = [int(i) for i in digs]
        num = sum(digs)
    return(num)
def rnum():
    return(randint(1,99999))
ran_nums = []
sols = []
it = 1

问题区域在这里

while it <= 3:
    print("Generating numbers")
    current = randint(1,99999)
    print("randomly intializing the 'current' int value")
    print("testing if the digital root is greater than 6")
    if returnDigRoot(current) > 6:
        print("going back to start of loop")
        continue
    print("testing if it isnt")
    else:
        ran_nums.append(current)
        print("append 'current' to ran_nums")
        sols.append(returnDigRoot(current))
        print("appending its digital root to sols")
        it += 1
        print("incrementing the iterator variable")

我的研究
我查看了StackOverflow和其他网站上的许多问题,但无法找到问题的解决方案;人们使用 else 语句遇到的大多数问题都与标签错误,前面的错误(我检查过)有关,前面没有 if 语句,或多个 else 陈述。

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

print("testing if it isnt")需要缩进。就目前而言,由于缩进,您的代码并未真正将ifelse相关联。这就像在C:

中写这样的东西
if(<condition>)
{
  <action>
}
prinf(...)
else
{
 <action>
}

只需将打印行与if语句下的其余代码对齐。

答案 1 :(得分:1)

该行:

print("testing if it isnt")

没有正确缩进。 if块和else块之间不能包含任何内容。

答案 2 :(得分:0)

您的陈述:

print("testing if it isnt")

缩进到错误的水平;这使得else:遵循一个独立的语句,这在语法上是错误的。可能你的意思是print语句跟随else并缩进一级。

答案 3 :(得分:0)

这很可能是缩进/空格/标签问题,因为我复制粘贴代码并且我没有收到任何错误。虽然我在Python 2.7.10上。 (在此重复它以确保您可以复制粘贴并尝试):

from random import randint

def returnDigRoot(num):
    digs = []
    while len(str(num)) != 1:
        num = str(num)
        for each in num:
            digs.append(each)
        num = int(num)
        digs = [int(i) for i in digs]
        num = sum(digs)

    return(num)
def rnum():
    return(randint(1,99999))
ran_nums = []
sols = []
it = 1

while it <= 3:
    current = randint(1,99999)
    if returnDigRoot(current) > 6:
        continue
    else: # this is where the error is pointed
        ran_nums.append(current)
        sols.append(returnDigRoot(current))
        it += 1

在一个不相关的注释中,while循环将需要很长时间才能退出,因为退出条件非常小(两个当前&lt; = 36只会导致退出)。