模块集合没有属性“MutableMapping”

模块集合没有属性 ‘MutableMapping’

Module collections has no attribute ‘MutableMapping’

Python“AttributeError: module ‘collections’ has no attribute ‘MutableMapping’”的出现有多种原因:

  1. 尝试从Python 版本 3.10+ 中MutableMapping的模块导入类。collections
  2. 使用 Python 版本 3.10+安装从模块导入MutableMapping类的
    模块。
    collections

attributeerror 模块集合没有属性 mutablemapping

Python 3.10 中发生了变化,MutableMapping该类已移至
collections.abc
模块。

如果您使用 Python 版本 3.10+,请从以下更改您的导入。

主程序
import collections # 👇️ Old import for versions older than Python3.10 # ⛔️ AttributeError: module 'collections' has no attribute 'MutableMapping' print(collections.MutableMapping)

collections.abc模块导入。

主程序
import collections.abc #👇️ New import for versions Python3.10+ # ✅ <class 'collections.abc.MutableMapping'> print(collections.abc.MutableMapping)

直接MutableMapping
collections.abc.

主程序
from collections.abc import MutableMapping # 👇️ <class 'collections.abc.MutableMapping'> print(MutableMapping)

您的错误消息将包含引发错误的文件和行。

attributeerror 模块集合没有属性 mutablemapping

例如,上面的屏幕截图显示错误发生在main.py
第 3 行的文件中。

如果你的代码需要在 Python 3.10 之前和之后的版本中运行,请使用语句。 try/except
主程序
try: # 👇️ using Python 3.10+ from collections.abc import MutableMapping except ImportError: # 👇️ using Python 3.10- from collections import MutableMapping # 👇️ <class 'collections.abc.MutableMapping'> print(MutableMapping)

try语句尝试从模块中导入MutableMapping
,如果出现 an
,我们知道我们运行的版本早于 3.10,因此我们从
模块中导入类。
collections.abcImportErrorcollections


您可以在文档的
这一部分
collections.abc查看
模块中
可用的所有类。

如果pip安装第三方模块时出现错误,请尝试升级模块版本。

pip install requests --upgrade pip3 install requests --upgrade python3 -m pip install requests --upgrade
确保替换requests为您尝试安装的包的名称。

如果这没有帮助,请尝试使用该
选项运行
pip安装命令。--pre

--pre选项使其pip包含包的预发布和开发版本。默认情况下pip只查找稳定版本。

pip install requests --pre pip3 install requests --pre python -m pip install requests --pre python3 -m pip install requests --pre

确保替换requests为您尝试安装的实际包的名称。

--pre如果您需要访问稳定版本中尚不可用的功能,则需要运行该命令。

这有时会有所帮助,因为可能有一个预发布版本,其中导入语句已更新为
from collections.abc import MutableMappingPython 3.10+ 中的正确导入。

或者,您可以向collections模块添加属性并将属性指向collections.abc.

主程序
import collections.abc # 👇️ add attributes to `collections` module # before you import the package that causes the issue collections.MutableMapping = collections.abc.MutableMapping collections.Mapping = collections.abc.Mapping collections.Iterable = collections.abc.Iterable collections.MutableSet = collections.abc.MutableSet collections.Callable = collections.abc.Callable # 👇️ import the problematic module below # import problematic_module

您只需为模块导入的类添加属性。

添加必要的属性后,确保导入导致问题的模块。

解决错误的另一种方法是恢复到 Python 3.9,因为 Python 3.10 中引入了更改。

您可以使用命令检查您的 Python 版本python --version

python --version python3 --version

获取 python 版本

您可以从python.org 官方网站下载特定版本(例如 3.9)

“寻找特定版本”表中提供了不同的版本。

安装特定的python版本

如果出现提示,请确保勾选以下选项:

  • 为所有用户安装启动器(推荐)
  • 将 Python 添加到 PATH(这会将 Python 添加到您的 PATH 环境变量)

结论

解决“AttributeError: module collections has no attribute MutableMapping”错误:

  1. 从导入MutableMappingcollections.abc,因为 Python 3.10 中进行了更改。
  2. 更新具有旧导入语句的任何模块的版本。
  3. 或者,如果您无法进行更正,则恢复为 Python 3.9。