在Python
3.3中collections
(如MutableMapping
或MutableSequence
)中的“抽象基类”被移至了第二级模块collections.abc
。因此,在Python
3.3+中,实际类型为collections.abc.MutableMapping
依此类推。文档指出,旧别名(例如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: ...
在需要这种类型的所有地方都使用整个脚本?
将其放在脚本的顶部:
import collections
try:
collectionsAbc = collections.abc
except AttributeError:
collectionsAbc = collections
然后更改抽象基本类型的所有前缀,例如changecollections.abc.MutableMapping
或collections.MutableMapping
to
collectionsAbc.MutableMapping
。
另外,也可以在顶部的脚本中导入所需的内容:
try:
from collections.abc import Callable # noqa
except ImportError:
from collections import Callable # noqa
问题内容: 如何使用python2.7获取公共IP?不是私有IP。 问题答案: 当前有几种选择: ip.42.pl jsonip.com httpbin.org ipify.org 以下是可以利用上述每种方法的确切方法。 ip.42.pl 这是我找到的第一个选项。对于脚本来说非常方便,您不需要在这里进行JSON解析。 jsonip.com 似乎该域的唯一目的是返回JSON中的IP地址。 httpb
我安装了两个python3.8,其中一个在终端中具有sudo权限时使用,另一个在没有权限时使用: 安装了一个python3.8(我想根据我使用的软件): 和为spyder安装的python3.8 我需要anaconda3/bin/python3.8用于一个项目,但现在我想安装一个我必须自己构建的包到python3.8,我花了几天时间才意识到sudo哪个python3.8和哪个python3.8是不
错误: Traceback(最近一次调用last):文件“E:\ mypython road \ src \ requeststest . py”,第1行,在导入请求文件“C:\ python 27 \ lib \ site-packages \ requests-2 . 3 . 0-py 2.7 . egg \ requests _ _ init _ _”中。py”,第58行,来自。在from中
问题内容: 我刚安装了python 2.7,并且还安装了2.7站点包。 当我得到的版本: 表明: 如何使用位于以下位置的2.7版本的pip: 问题答案: $ PATH变量中的某个位置应安装一个名为“ pip2.7”的二进制文件。 您可以通过键入以下内容找到答案 这应该在您的标准输出上打印“ /usr/local/bin/pip2.7”之类的内容。如果它不打印任何类似内容,则表示未安装。在这种情况下
我的系统正在运行CentOS 6。我没有管理员访问权限,所以sudo不可用。我有Python 2.7.3可用,以及和。我希望我可以使用这些来建立一个新的虚拟环境在其中安装 我尝试了这里描述的方法:在virtualenv中使用python3 但是得到了这个错误: 我的系统还安装了Python 3.4模块,因此我尝试了这一点,但virtualenv似乎无法在那里工作: 这似乎是有道理的,因为只有Pyt
我能够在Java中使用XSLT1.0,如以下示例所示:- copy.xml copy.xsl copy.java 输出
editor.fxml,使用: 实际上,我找不到这两种代码有什么不同。我错过什么了吗?
问题内容: 我想创建一个属性字符串,然后将其存储在中,然后再次访问它,并将属性字符串分配给。我该怎么办?提前致谢。 问题答案: 您必须将转换为,然后将其存储在中。