我正在开发一个基本推荐软件的组合项目,其中我收集用户输入并根据这些输入向他们提供推荐列表。 我正在使用链表数据结构,并且我可以获得程序的一部分来运行。 但是,我目前遇到了一个似乎无法解决的错误。
这是我遇到的问题:
Traceback (most recent call last):
File "/Users/Kyle_Borzoni/Desktop/Coding/My_Odyssey/my_odyssey.py", line 57, in <module>
if sublist_head.get_value()[0] == selected_odyssey_theme:
~~~~~~~~~~~~~~~~~~~~~~~~^^^
TypeError: 'NoneType' object is not subscriptable
下面是我的 GitHub 存储库的链接: https:// /github.com/Kyloni417/my_odyssey
如前所述,我使用链接列表数据结构,并且我希望所选主题输出与该主题关联的列表。 据我了解,如果所选主题与列表[0]匹配,那么它应该输出具有匹配输入的所有列表项。 主题的后半部分似乎有效,但程序在应该重复循环时仍然出错。 任何帮助将不胜感激!
错误信息 "TypeError: 'NoneType' object is not subscriptable" 是指你试图在一个 NoneType 对象上使用下标操作,也就是使用
[]
来访问它的元素,但是 NoneType 对象并不支持这样的操作。
在你的代码中,错误出现在
sublist_head.get_value()[0]
这一行,这意味着
sublist_head.get_value()
返回了
None
。
问题出在
find_sublist_head
函数中。这个函数在遍历链表时,如果找到了匹配的主题,就应该返回该节点。但是,如果遍历完整个链表都没有找到匹配的主题,函数就会返回
None
。
为了解决这个问题,你需要修改
find_sublist_head
函数,确保它在任何情况下都返回一个链表节点,而不是
None
。
一种解决方法是在函数的最后添加一行
return Node(None)
,确保即使没有找到匹配的主题,函数也会返回一个空的节点:
def find_sublist_head(head, target_theme):
current = head
while current is not None:
if current.get_value()[0] == target_theme:
return current
current = current.get_next()
return Node(None) # 返回一个空的节点,防止返回 None
这样,即使
find_sublist_head
函数没有找到匹配的主题,它也会返回一个空的节点,而不是
None
。这样就可以避免在
sublist_head.get_value()
时出现
NoneType
错误。
另外,你也可以考虑在调用
find_sublist_head
函数之后,检查返回值是否为
None
,如果是
None
则进行相应的处理,例如输出提示信息或者进行其他操作。