模块集合没有属性 ‘MutableMapping’
Module collections has no attribute ‘MutableMapping’
Python“AttributeError: module ‘collections’ has no attribute ‘MutableMapping’”的出现有多种原因:
- 尝试从Python 版本 3.10+ 中
MutableMapping
的模块导入类。collections
- 使用 Python 版本 3.10+安装从模块导入
MutableMapping
类的
模块。collections
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)
您的错误消息将包含引发错误的文件和行。
例如,上面的屏幕截图显示错误发生在main.py
第 3 行的文件中。
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.abc
ImportError
collections
您可以在文档的这一部分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 MutableMapping
Python 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 版本python --version
。
python --version python3 --version
您可以从python.org 官方网站下载特定版本(例如 3.9)
。
“寻找特定版本”表中提供了不同的版本。
如果出现提示,请确保勾选以下选项:
- 为所有用户安装启动器(推荐)
- 将 Python 添加到 PATH(这会将 Python 添加到您的 PATH 环境变量)
结论
解决“AttributeError: module collections has no attribute MutableMapping”错误:
- 从导入
MutableMapping
类collections.abc
,因为 Python 3.10 中进行了更改。 - 更新具有旧导入语句的任何模块的版本。
- 或者,如果您无法进行更正,则恢复为 Python 3.9。