迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

解决 Python中 TypeError: Nonetype Object Is Not Subscriptable 错误

作者:迹忆客 最近更新:2023/05/30 浏览次数:

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])

输出:

Python 错误 TypeError- 'NoneType' object is not subscriptable

发生这种情况是因为在最后一行中,我们为变量 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])

输出:

解决 Python 错误 TypeError- 'NoneType' object is not subscriptable

同样,这也是出于同样的原因。 我们必须放弃使用另一个变量来存储排序列表以消除此错误。

这是在下面完成的。

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() 函数来修复此错误,以避免首先出现此错误。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 错误 TypeError: Unhashable Type: List

发布时间:2023/05/17 浏览次数:112 分类:Python

本文将讨论 TypeError: unhashable type: 'list' 以及如何在 Python 中修复它。因为 Python 字典只接受可散列数据类型作为它们的键,而列表是不可散列的。

解决 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 中重新创建非序列错误的迭代。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便