解决 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: Unhashable Type: List
发布时间:2023/05/17 浏览次数:112 分类:Python
-
本文将讨论 TypeError: unhashable type: 'list' 以及如何在 Python 中修复它。因为 Python 字典只接受可散列数据类型作为它们的键,而列表是不可散列的。
Python 错误 TypeError: __str__ Returned Non-String but Printing Output
发布时间:2023/05/17 浏览次数:142 分类:Python
-
本文旨在解决当我们尝试打印字符串而不是在函数中使用 return 语句时出现的问题。Python 错误TypeError: __str__ Returned Non-String but Printing Output
解决 Python 中 TypeError: An Integer Is Required 错误
发布时间:2023/05/16 浏览次数:149 分类:Python
-
在 Python 代码中发生的另一个最常见的错误是 TypeError。本文将展示我们如何在 Python 中得到 TypeError。 此外,我们将通过使用必要的示例和解释来讨论该主题,以使该主题更容易理解。
Python 中错误 TypeError: Must Be Real Number, Not STR
发布时间:2023/05/16 浏览次数:168 分类:Python
-
TypeError: must be real number, not str 错误涉及使用错误的类型和非实数,在本例中为 str 类型。使用 float() 或 int() 解决Python 中 TypeError: must be real number, not str
Python 错误 TypeError: Iteration Over Non-Sequence
发布时间:2023/05/16 浏览次数:69 分类:Python
-
当您尝试迭代不可迭代的对象时,会出现错误 TypeError: iteration over non-sequence 。 现在您已经了解了 TypeError 的原因,让我们在 Python 中重新创建非序列错误的迭代。
Python 中解决 TypeError: Can't Multiply Sequence by Non-Int of Type STR 错误
发布时间:2023/05/15 浏览次数:202 分类:Python
-
本篇文章着重于并旨在为 TypeError: can't multiply sequence by non-int of type 'str' 错误提供解决方案。Python 提供了多种数据类型,str 数据类型就是其中之一。 Python 中的字符串表示一系列 Unicode 字符,用
Python 中 TypeError: Can't Convert 'List' Object to STR 错误
发布时间:2023/05/15 浏览次数:127 分类:Python
-
我们将使用示例将列表对象转换为 Python 中的字符串。 我们还将通过示例介绍如何在 Python 中将字符串与列表对象连接起来。
Python 中 TypeError: 'DataFrame' Object Is Not Callable 错误
发布时间:2023/05/15 浏览次数:188 分类:Python
-
我们将介绍如何在 Python 中基于查询从 DataFrame 中调用数据。 我们还将通过示例介绍如何解决Python中的错误 TypeError: ‘DataFrame’ object is not callable 。
修复 Python 中 TypeError: List Indices Must Be Integers, Not List 错误
发布时间:2023/05/13 浏览次数:112 分类:Python
-
我们将介绍嵌套列表以及许多程序员在尝试通过 Python 中的示例访问其中的元素时遇到的常见错误。修复 TypeError: list indices must be integers, not list in Python 列表是 Python 最常用和最通用的数据类型之