DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.10 it will stop working from collections import Iterable
时间: 2024-03-28 19:42:12 浏览: 169
这个警告是因为你在使用Python标准库`collections`中的`Iterable`类时,没有使用建议的导入方式。在Python 3.3之前,`collections`模块中的ABCs(抽象基类)是以普通的类形式存在的,因此我们可以直接从`collections`模块中导入ABCs,例如:
```
from collections import Iterable
class MyIterableClass(Iterable):
# some code here
```
然而,从Python 3.3开始,`collections`模块中的ABCs被移动到了`collections.abc`模块中,并且在Python 3.10中将停止在`collections`模块中提供ABCs的支持。因此,为了确保代码的可移植性和向后兼容性,建议使用以下方式导入ABCs:
```
from collections.abc import Iterable
class MyIterableClass(Iterable):
# some code here
```
这样可以避免在将来的Python版本中出现警告或错误。如果你想消除这个警告,只需将导入语句中的`collections`改为`collections.abc`即可。
相关问题
解释/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/__init__.py:107: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working from collections import MutableMapping /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/rcsetup.py:20: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working from collections import Iterable, Mapping /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/colors.py:53: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working from collections import Sized
这段警告信息是在使用 Matplotlib 库时出现的,其中的 DeprecationWarning 告诉我们使用或导入 'collections' 中的 ABCs 而不是从 'collections.abc' 中导入是不推荐的。在 Python 3.8 中,这种用法将停止工作。通常情况下,这些警告可以忽略,因为它们不会影响代码的运行。但如果你想避免这些警告,可以使用 'collections.abc' 中的 ABCs,而不是从 'collections' 中导入。
deprecationwarning: using or importing the abcs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working from collections import mapping, defaultdict
### 回答1:
警告:在3.8版本中,使用或导入'collections'中的ABCS而不是'collections.abc'已经过时,并将停止工作。建议使用'collections.abc'来导入相应的模块,例如:`from collections.abc import Mapping, defaultdict`。
### 回答2:
在Python中,collections是一个非常有用的库,可以用于处理各种数据类型。然而,最近在使用collections中的abcs模块时,会出现如下警告:deprecationwarning: using or importing the abcs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working。
这个警告的意思是,使用或导入collections模块中的abcs模块已经被弃用了。如果还使用这种方式,在Python 3.8版本中就将无法正常工作了。所以,我们需要从collections.abc中导入abcs模块,而不是从collections中。
如果你发现自己的代码中有类似的警告,那么就需要进行一些修改。可以考虑将代码中的所有使用方式都修改为从collections.abc中导入。比如,从collections中导入mapping模块,可以改为从collections.abc中导入Mapping模块;从collections中导入defaultdict模块,可以改为从collections.abc中导入DefaultDict模块。
总之,我们需要尽快对代码进行修改,以避免出现版本不兼容的问题。这对于代码的可维护性和稳定性都是非常重要的。
### 回答3:
首先,这个警告信息是在Python 3.7版本中引入的。它的目的是提醒我们在使用Python的collections模块时,不要直接从'collections'中导入抽象基类(ABCs),而应该从'collections.abc'中导入。这是因为在之前的Python版本中,抽象基类的实现在'collections'模块中,但在Python3.3版本之后,所有的抽象基类都被移到了'collections.abc'中。因此,如果我们使用之前的实现方式,将来在Python 3.8版本中,会导致程序无法正常工作。
具体地说,警告中提到的import语句中包含了两个抽象基类:mapping和defaultdict。mapping是'collections.abc'中定义的抽象基类,为所有映射类型提供了共同的接口,包括dict和其它实现了映射接口的对象。而defaultdict则是'collections'中的一个具体类,它扩展了原有的dict类,使得在访问不存在的键时可以返回一个默认值。由于defaultdict是dict的子类且实现了mapping接口,因此可以通过导入mapping抽象基类的方式一并导入defaultdict类。
为了解决上述警告,我们只需要修改import语句,将mapping和defaultdict从'collections'中移到'collections.abc'中即可:
from collections.abc import mapping, defaultdict
这样修改之后,即使在未来的Python版本中,我们的程序也可以正常工作,而不用担心由于抽象基类实现的变化而导致的兼容性问题。总之,遵循最新的Python风格和规范,可以让我们的程序更加健壮和可维护。
阅读全文