'NoneType'对象不可迭代 - 循环w /返回值

时间:2015-06-16 16:30:52

标签: python python-2.7

此代码的目的是找到最先出现的字母顺序中最长的字符串并返回该子集。

我可以执行一次代码,但是当我尝试循环它时,我得到'NoneType'对象不可迭代(指向最后一行)。我已经确定我返回和输入的内容都不是NoneType,所以我觉得我错过了一个基础。

这是我在课堂上的第一个项目,所以代码不需要是“最好的”或最有效的方式 - 它只是学习基础知识。

s = 'efghiabcdefg'
best = ''
comp = ''
temp = ''

def prog(comp, temp, best, s):
    for char in s:
        if comp <= char: #Begins COMParison of first CHARacter to <null>
            comp = char  #If the following character is larger (alphabetical), stores that as the next value to compare to.
            temp = temp + comp  #Creates a TEMPorary string of characters in alpha order.
            if len(temp) > len(best):  #Accepts first string as longest string, then compares subsequent strings to the "best" length string, replacing if longer.
                best = temp
            if len(best) == len(s):  #This is the code that was added...
                return(s, best)  #...to fix the problem.  
        else:
            s = s.lstrip(temp)  #Removes those characters considered in this pass
            return (str(s), str(best)) #Provides new input for subsequent passes

while len(s) != 0:
    (s, best) = prog(comp, temp, best, s)

2 个答案:

答案 0 :(得分:1)

>mklink /j c:\gitRepos\Posts C:\Bitnami\wamp\apache2\htdocs\Posts正在返回prog。您得到的错误是当您尝试将结果解压缩到元组(s,best)

您需要修复逻辑,以确保None不会返回prog。如果您的代码从不在循环中执行None子句,它将返回None

答案 1 :(得分:1)

在所有情况下,您都不会return。在Python中,如果函数在没有明确的return语句的情况下结束,它将返回None

如果输入字符串为空,请考虑返回一些内容。