Python类型错误:无

2024-10-03 02:32:39 发布

您现在位置:Python中文网/ 问答频道 /正文

以下代码在类型为的第6行返回一个错误:TypeError:“NoneType”对象不可下标

怎么了?你知道吗

def insertAtList(name, score, H):
    E = [score, name]
    i = len(H) - 1
    if H[i] != None:
        print("fail")
    while H[i-1][0] < E[0] or H[i-1] == None:
        H[i] = H[i-1]
        i -= 1
    H[i] = E
    for c in range (0,len(H) - 1):
        print(H[c])

def testq4():
    H = [[940, "Mike"], [880, "Rob"], [830, "Jill"], [790, "Paul"],
        [750, "Anna"], [660, "Rose"], [650, "Jack"], None, None, None]
    insertAtList("Mark",675,H)

testq4()

Tags: 对象代码namenone类型lenifdef
2条回答

错误信息非常清楚。您正在访问None值,试图将其视为列表。原因是,在测试它是否为“无”之前,您首先尝试以这种方式访问它。所以需要在while循环中恢复条件。最重要的是,没有检查没有使用!=或==运算符,但“is”和“is not”运算符,因为都不是单例。最后但并非最不重要的一点是,您应该考虑将代码替换为利用列表排序的内置功能的代码:

 def insertAtList(name, score, highscores):
     highscores.append([score, name])
     highscores.sort(key=lambda entry: 0 if entry is None else entry, reverse=True)



 H = [[940, "Mike"], [880, "Rob"], [830, "Jill"], [790, "Paul"],
         [750, "Anna"], [660, "Rose"], [650, "Jack"], None, None, None]
 insertAtList("Mark",675,H)
 print H

您需要交换while循环条件中操作数的顺序。or从左到右检查条件,并在找到一个True值时停止计算。这就是当你发现H[i-1]None时你想做的。当前,如果H[i-1]None,您仍在尝试计算H[i-1][0],但它不存在。你知道吗

试着这样做:

# ...
if H[i] is not None:
    print("fail")
while H[i-1] is None or H[i-1][0] < E[0]:
    H[i] = H[i-1]
    i -= 1
# ...

相关问题 更多 >