解决 Python中 TypeError: Nonetype Object Is Not Subscriptable 错误
Python 有各种支持索引的序列数据类型,如列表、元组和字典。 由于术语下标指的是索引时使用的值,因此这些对象也称为可下标对象。
在 Python 中,此类可订阅对象的不正确索引通常会导致 TypeError: 'NoneType' object is not subscriptable 。 在本文中,我们将讨论此错误以及修复该错误的可能解决方案。
准备好? 让我们开始!
Python 中错误 TypeError: 'NoneType' object is not subscriptable
在我们了解为什么会出现 TypeError: 'NoneType' object is not subscriptable 以及如何修复它之前,让我们先了解一些基础知识。
Python 中的 NoneType 和可订阅对象简介
在 Python 中,NoneType 对象是没有值的对象。 换句话说,它是一个不返回任何东西的对象。
值 None 通常由搜索某物但未找到它的函数返回。 下面是一个函数返回 None 值的示例。
def none_demo():
for i in [1, 2, 3, 4, 5]:
if i == 10:
return yes
ans = none_demo()
print(ans)
输出:
None
谈到可订阅对象,顾名思义,这些是可以被订阅或索引的 Python 对象。 简而言之,可订阅对象是那些可以在索引值(如 0、1 等)的帮助下访问或遍历的对象。
列表、元组和字典是此类对象的示例。 下面的代码展示了如何借助索引遍历列表。
cakes = ['Mango', 'Vanilla', 'Chocolate']
for i in range(0,3):
print(cakes[i])
输出:
Mango
Vanilla
Chocolate
现在我们已经了解了基础知识,所以让我们继续前进!
解决 Python 错误 TypeError: 'NoneType' object is not subscriptable
在 Python 中,有一些内置函数,如 reverse()
、sort()
和 append()
,我们可以在可订阅对象上使用它们。 但是如果我们将这些内置函数的结果赋给一个变量,就会导致 TypeError: 'NoneType' object is not subscriptable。
看下面给出的例子。 在这里,我们在名为 desserts 的列表上使用了 reverse()
函数,并将结果存储在变量 ans 中。
然后,我们打印了变量 ans 的值,从输出中可以看出它是 None 。 但是,最后一条语句会导致 TypeError: 'NoneType' object is not subscriptable。
任何猜测为什么会这样?
desserts = ['cakes', 'pie', 'cookies']
ans = desserts.reverse()
print("The variable ans contains: ", ans)
print(ans[0])
输出:
发生这种情况是因为在最后一行中,我们为变量 ans 添加了下标。 我们知道变量 ans 包含值 None,它甚至不是序列数据类型; 因此,它不能通过索引访问。
这里要理解的重要一点是,虽然我们将反向列表分配给变量 ans,但这并没有使该变量 ans 成为列表类型。 因此,我们无法使用索引访问变量 ans,将其视为列表。
实际上,变量 ans 是一个 NoneType 对象,Python 不支持索引此类对象。 因此,一定不要尝试索引不可订阅的对象,否则会导致 TypeError: 'NoneType' object is not subscriptable。
要从上述代码中纠正此问题,请按照以下方法操作。
这次我们不将 reverse()
操作的结果分配给任何变量。 这样,该函数将自动用反向列表替换当前列表,而无需任何额外空间。
稍后,我们可以根据需要打印列表。 在这里,我们首先打印整个反向列表,然后使用下标 0 访问第一个元素。
如您所见,代码运行良好并提供了所需的输出。
desserts = ['cakes', 'pie', 'cookies']
desserts.reverse()
print(desserts)
print(desserts[0])
输出:
['cookies', 'pie', 'cakes']
cookies
不将结果分配给变量然后对其进行索引的相同规则也适用于 sort()
和 append()
等其他函数。 下面是一个使用 sort()
函数并遇到 TypeError: 'NoneType' object is not subscriptable 的示例。
desserts = ['cakes', 'pie', 'cookies']
ans = desserts.sort()
print("The value of the variable is: ", ans)
print(ans[1])
输出:
同样,这也是出于同样的原因。 我们必须放弃使用另一个变量来存储排序列表以消除此错误。
这是在下面完成的。
desserts = ['cakes', 'pie', 'cookies']
desserts.sort()
print(desserts)
print(desserts[1])
输出:
['cakes', 'cookies', 'pie']
cookies
我们可以看到,这一次,sort()
方法将列表替换为新的排序列表,而无需任何额外空间。 稍后,我们可以使用索引访问排序列表的各个元素,而不必担心这个错误!
这里有一些有趣的东西。 准备好听了吗?
在 sort()
函数的情况下,如果你还想用一个单独的变量来存储排序后的列表,你可以使用 sorted()
函数。 这是在下面完成的。
desserts = ['cakes', 'pie', 'cookies']
ans = sorted(desserts)
print(ans)
print(ans[0])
输出:
['cakes', 'cookies', 'pie']
cakes
我们可以看到这不会导致任何错误,因为 sorted()
函数返回一个排序列表,这与 sort()
方法对列表进行就地排序不同。
但不幸的是,我们没有 reverse()
和 append()
方法的替代函数。
这就是本文的内容。
总结
本文向我们介绍了 Python 中 TypeError: 'NoneType' object is not subscriptable。 我们看到了将对序列数据类型执行 reverse()
和 append()
等操作的值分配给变量是如何导致此错误的。
我们还看到了如何通过使用 sorted()
函数而不是 sort()
函数来修复此错误,以避免首先出现此错误。
相关文章
Python 错误 TypeError: List Indices Must Be Integers, Not STR
发布时间:2023/07/09 浏览次数:954 分类:Python
-
在本篇文章中,我们的目标是探索如何避免 TypeError: list indices must be integers or slices, not str。TypeError主要发生在Python中,每当操作的数据类型出现问题时。
Python 错误 TypeError: Can Only Concatenate Tuple (Not Int) to Tuple
发布时间:2023/07/09 浏览次数:1527 分类:Python
-
Python错误TypeError: Can Only Concatenate Tuple (Not "Int") To Tuple 当您尝试连接除元组之外的任何数据类型的一个或多个值时,会发生此常见错误。
Python 中 TypeError: Unhashable Type: Slice 错误
发布时间:2023/07/07 浏览次数:4165 分类:Python
-
Python 中 TypeError: unhashable type: 'slice' 当我们尝试对给定数据类型执行某些不受支持的操作时,Python 中会引发 TypeError。
Python 中错误 NoneType Object Has No Attribute Append
发布时间:2023/07/07 浏览次数:323 分类:Python
-
通过这个解释,我们将了解 NoneType 错误,并了解导致此错误的原因是什么。 我们还将学习如何在 Python 中修复此错误。
修复 Python 错误TypeError: Missing 1 Required Positional Argument
发布时间:2023/05/31 浏览次数:1045 分类:Python
-
本篇文章将讨论 Python 中的 TypeError: missing 1 required positional argument: 'self' 错误以及我们如何解决它。让我们讨论引发此错误的情况。不在 Python 中实例化对象
修复 Python 中的 TypeError: Can Only Join an Iterable 错误
发布时间:2023/05/30 浏览次数:653 分类:Python
-
本篇文章将讨论Python中的 TypeError: can only join an iterable 错误。修复Python中 TypeError: can only join an iterable 错误。由于它是 TypeError,我们可以得出结论,正在对给定对象执行不受支持的操作。
Python 错误 TypeError: Function Object Is Not Subscriptable
发布时间:2023/05/30 浏览次数:276 分类:Python
-
我们将在本文中了解为什么会出现 TypeError: 'function' object is not subscriptable,以及我们如何在 Python 中修复此错误。
解决 Python中错误 TypeError: Not All Arguments Converted During String Forma
发布时间:2023/05/30 浏览次数:1266 分类:Python
-
模 (%) 运算符就是其中一种方法。 它是 Python 中最古老的字符串格式化方法之一,以错误的方式使用它可能会导致 TypeError: not all arguments converted during string formatting。
Python 错误 TypeError: Unhashable Type: List
发布时间:2023/05/17 浏览次数:250 分类:Python
-
本文将讨论 TypeError: unhashable type: 'list' 以及如何在 Python 中修复它。因为 Python 字典只接受可散列数据类型作为它们的键,而列表是不可散列的。