Python TypeError: 'NoneType' object is not subscriptable 报错原因与修复

阿澈
阿澈
发布时间:2026-10-14| 2人浏览过
原创

本文解析Python中常见的TypeError: 'NoneType' object is not subscriptable错误。该错误通常源于将返回None的方法(如random.shuffle)赋值给变量,导致后续对None进行索引操作。文章通过代码示例说明问题根源,并提供移除赋值语句的正确修复方案,帮助开发者快速定位并解决此类类型错误。

问题发现与现象

问题发现

在编写Python代码时遇到了上述报错,查阅网络上的解决方案,发现大多数建议都是“重新定义该变量”,这种回答让人难以理解其背后的逻辑。

经过排查,发现根本原因在于将返回None的方法结果赋值给了变量,随后对该变量进行操作从而触发了错误。以下是具体代码示例。

错误代码示例


  for i in range(2000):
    read_lines = random.shuffle(read_lines) # 问题出在这里了
    print(read_lines)

从代码表面看似乎没有明显问题,但实际运行时会直接抛出异常。

报错信息分析


>>TypeError: 'NoneType' object is not subscriptable

问题的核心在于random.shuffle函数本身返回None,但代码中将其赋值给了read_lines变量。这导致read_lines的值变为None,后续任何对read_lines的操作(包括打印)都会引发TypeError。

查看random库中shuffle方法的源码注释可知,该函数明确说明其返回值为None。

源码机制解析


  def shuffle(self, x, random=None):
    """
    Shuffle list x in place, and return None.

    Optional argument random is a 0-argument function returning a
    random float in [0.0, 1.0); if it is the default None, the
    standard random.random will be used.

    """

    if random is None:
      randbelow = self._randbelow
      for i in reversed(range(1, len(x))):
        # pick an element in x[:i+1] with which to exchange x[i]
        j = randbelow(i+1)
        x[i], x[j] = x[j], x[i]
    else:
      _int = int
      for i in reversed(range(1, len(x))):
        # pick an element in x[:i+1] with which to exchange x[i]
        j = _int(random() * (i+1))
        x[i], x[j] = x[j], x[i]

解决方案

只需修改上述赋值语句即可解决问题。

修复方案


  for i in range(2000):
    random.shuffle(read_lines)
    print(read_lines)
    content_list = []

总结

至此,关于Python报错TypeError: 'NoneType' object is not subscriptable的解决方法介绍完毕。如需了解更多相关内容,可搜索本站往期文章或继续浏览后续文章,感谢支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。