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
时间: 2023-05-31 15:18:51 浏览: 244
解决 warning 显示 The linear_assignment function is deprecated in 0.21 and will be removed from 0.23. Us…
### 回答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风格和规范,可以让我们的程序更加健壮和可维护。
阅读全文