我正在使用适用于Linux的Windows子系统(特别是适用于Windows的Ubuntu(来运行一些python代码。当我尝试运行以下内容:"import collections.abc"时,出现以下错误:"导入错误:没有名为abc的模块"。
我可以导入"集合",但是如果我尝试:"collections.abc",则会收到以下错误:"属性错误:"模块"对象没有属性"abc"。
此外,我尝试在命令提示符下导入模块而不使用 Ubuntu for Windows,它已成功导入。
默认情况下,"集合"模块应该包含在python中,所以我不确定为什么它会给我这个错误。
来自 Python 3 collections
模块的文档:
在 3.3 版更改: 已移动 集合抽象基类 到
collections.abc
模块。为了向后兼容,它们继续可见 在这个模块中,通过 Python 3.7。 随后,它们将被完全删除。
因此,任何已经存在于 collections.abc
的内容Python <= 3.2,包括Python 2,见collections
径直。
要支持所有版本的 Python,请使用 try/except 块:
try: # works in Python >= 3.3
import collections.abc as collections_abc
except ImportError: # Python <= 3.2 including Python 2
import collections as collections_abc
然后使用例如 collections_abc.Sequence
而不是 Python 中的collections.abc.Sequence
>= 3.3 和 collections.Sequence
Python <= 3.2。
在另一个答案中查看更长的讨论。
对于向后兼容的代码,请使用模块六(文档:https://six.readthedocs.io/index.html?highlight=abc#module-six.moves(
例如:
from six.moves.collections_abc import Iterable
isinstance([1, 2, 3], Iterable) # -> True
isinstance({1, 2, 3}, Iterable) # -> True