In Python 3.3 “abstract base classes” in collections
(like MutableMapping
or MutableSequence
) were moved to second-level module collections.abc
.所以在 Python 3.3+ 中,实际类型是 collections.abc.MutableMapping
等等。 文档 指出旧的别名(例如 collections.MutableMapping
)将在 Python 3.7(当前最新版本)之前可用,但是在 3.8 中这些别名将被删除。
当您使用别名时,当前版本的 Python 3.7 甚至会产生警告:
./scripts/generateBoard.py:145: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
elif isinstance(value, (collections.MutableMapping, collections.MutableSequence)) == True:
在 python 2.7 中没有 collections.abc
。
当 Python 脚本打算与(几乎)任何 Python 版本一起使用时,它如何以最方便的方式处理这种差异?我正在寻找一种解决方案,它可以理想地在一个中心位置解决这个问题,而不必在我需要这种类型的所有脚本中使用 try: ... except: ...
?
原文由 Freddie Chopin 发布,翻译遵循 CC BY-SA 4.0 许可协议
将它放在脚本的顶部:
然后更改抽象基类型的所有前缀,例如将
collections.abc.MutableMapping
或collections.MutableMapping
更改为collectionsAbc.MutableMapping
。或者,在顶部的脚本中将您需要的内容导入一个地方: