在Python 3.3“抽象基类”中collections
(like MutableMapping
or MutableSequence
) 被移至二级模块collections.abc
。所以在 Python 3.3+ 中,真实类型是collections.abc.MutableMapping
等等。文档 https://docs.python.org/3/library/collections.html指出旧的别名(例如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: ...
脚本中到处都是我需要这种类型吗?
将其放在脚本的顶部:
import collections
try:
collectionsAbc = collections.abc
except AttributeError:
collectionsAbc = collections
然后更改抽象基类型的所有前缀,例如改变collections.abc.MutableMapping
or collections.MutableMapping
to collectionsAbc.MutableMapping
.
或者,将顶部脚本中所需的内容导入到一个位置:
try:
from collections.abc import Callable # noqa
except ImportError:
from collections import Callable # noqa
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)