如何修复“ TypeError:'NoneType'对象不可下标”?

时间:2019-05-09 17:26:11

标签: python arrays for-loop while-loop

我已经开始学习Udacity计算机科学入门课程,但遇到了以下问题: 定义一个过程,该过程接受1-9之间的数字字符串 输出带有以下参数的列表: 字符串中的每个数字都应插入列表中。 如果字符串中的数字x小于或等于 到前面的数字y,应插入数字x 进入子列表。继续将以下数字添加到 子列表,直到达到数字z 大于数字y。 然后将此数字z添加到常规列表中,然后继续。

我找到了这个解决方案,该解决方案没有问题:

def numbers_in_lists(theString):
    maxNum = int(theString[0])
    mainList = [maxNum]    
    for e in theString[1:]:
        num = int(e)
        if num > maxNum:
            mainList.append(num)
            maxNum = num
        else:
            if (type(mainList[-1]) == list):
                mainList[-1].append(num)
            else:
                mainList.append([num])              
    return mainList

这是我的代码。

def numbers_in_lists(s):
    p = [int(s[0])]
    n = len(s)
    i = 1
    while i < n:
        first = int(s[i-1])
        second = int(s[i])
        if (second > first): p = p.append(second)
        if (second <= first):
            if (type(p[-1]) == list): p[-1].append(second)
            else: p.append([second])
        i = i + 1
    return p

除了while循环外,其他类似。我收到错误

line 10, in numbers_in_lists
    if (type(p[-1]) == list): p[-1].append(second)
TypeError: 'NoneType' object is not subscriptable

我找到了解决方案,但是我不明白为什么我的代码无法正常工作以及如何解决错误。

1 个答案:

答案 0 :(得分:0)

这是问题所在

if (second > first): p = p.append(second)

append()方法修改原始列表;它不会返回新列表。它返回None

只需使用p.append(second)