在Python 3.10及其以后的版本中,collections
模块中的 Sequence
类已经被移动到了 collections.abc
子模块中。这是因为在Python 3.3版本时,collections.abc
就被引入作为抽象基类(ABCs)的正式家园,而 collections
模块本身被设计为主要包含具体的容器类型(如 deque
和 Counter
)。从Python 3.10开始,尝试直接从 collections
模块导入 Sequence
或其他ABCs将会导致 ImportError
如果你的代码中有如下导入语句:
from collections import Sequence
在Python 3.10及更高版本中,你需要将其修改为:
from collections.abc import Sequence
这个修改将确保你的代码能够正确导入 Sequence
ABC,并且与Python 3.10及以后的版本兼容。
如果你需要确保你的代码在多个Python版本之间都能正常工作,你可以考虑使用条件导入:
try:
from collections.abc import Sequence
except ImportError:
# 兼容Python 3.9及以下版本
from collections import Sequence
这段代码首先尝试从 collections.abc
导入 Sequence
,如果失败(意味着Python版本低于3.10),则会回退到从 collections
导入。这样就能确保代码在旧版Python上也能正常运行。不过,随着时间的推移,支持旧版本的Python可能会变得不切实际,所以通常建议升级到最新的Python版本,并使用相应的模块路径。
同理,
Container
Iterable
Iterator
Generator
Reversible
Sized
Collection
Callable
Sequence
MutableSequence
Mapping
MutableMapping
Set
MutableSet
MappingView
KeysView
ItemsView
ValuesView
这些抽象基类从collections
模块移到了collections.abc。
因此,如果你正在使用这些抽象基类,并且你的代码是在Python 3.3或更高版本上运行,你应该从collections.abc
导入它们,而不是直接从collections
导入