在Python 3.3中,collections
(如MutableMapping
或MutableSequence
)中的“抽象基类”被移到二级模块collections.abc
。所以在Python 3.3+中,真正的类型是collections.abc.MutableMapping
等等。Documentation声明旧别名(例如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: ...
覆盖整个脚本?
将此置于脚本顶部:
然后更改抽象基类型的所有前缀,例如将
collections.abc.MutableMapping
或collections.MutableMapping
更改为collectionsAbc.MutableMapping
。或者,在一个地方导入脚本顶部所需的内容:
相关问题 更多 >
编程相关推荐