栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

isinstance()意外返回False

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

isinstance()意外返回False

您的代码对

requests
程序包具有间接依赖关系,并且
requests
程序包具有名为的奇怪子模块
requests.packages
。它曾经包含来自多个依赖项(包括)的复制源代码
urllib3
,但他们停止这样做。他们想保持
requests.packages
向后兼容性,所以现在他们做的事情很奇怪。

相反的
requests.packages
,包括一个完整的复制
urllib3
的源代码,现在进口
urllib3
和套`sys.modules[‘requests.packages.urllib3’]

urllib3

。根据
requests
版本的不同,它可能还会设置许多其他
sys.modules`条目。例如,从请求2.18.4开始,源代码会

for package in ('urllib3', 'idna', 'chardet'):    locals()[package] = __import__(package)    # This traversal is apparently necessary such that the identities are    # preserved (requests.packages.urllib3.* is urllib3.*)    for mod in list(sys.modules):        if mod == package or mod.startswith(package + '.'): sys.modules['requests.packages.' + mod] = sys.modules[mod]

但在2.17.0中,

import urllib3sys.modules['requests.packages.urllib3'] = urllib3import idnasys.modules['requests.packages.idna'] = idnaimport chardetsys.modules['requests.packages.chardet'] = chardet

此代码与导入包的子模块交互不良。如果某些代码尝试执行该操作,

importrequests.packages.urllib3.exceptions
而Python找不到
sys.modules['requests.packages.urllib3.exceptions']
条目,则Python将
重新创建
urllib3.exceptions
模块并进行设置
urllib3.exceptions
,并设置
sys.modules['requests.packages.urllib3.exceptions']
到新模块(但不会涉及
sys.modules['urllib3.exceptions']
。这将生成所涉及类的新副本,从而导致您的错误)。

早在5月份就报告了一个具有相同原因的相关问题,导致了2.18.4中显示的新代码。2.18.4不应引起您所看到的特定问题,但是它仍然很脆弱,因为如果

urllib3
在用
requests.packages
拧紧时尚未加载的任何子模块
sys.modules
,这些子模块将表现出与您今天看到的相同的问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/645099.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号