首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -如何检测模块已被自定义加载器加载?

Python -如何检测模块已被自定义加载器加载?
EN

Stack Overflow用户
提问于 2012-10-30 16:36:03
回答 1查看 546关注 0票数 5

在Python-3.3之前,我检测到使用hasattr(mod, '__loader__')的自定义加载器加载了一个模块。在Python-3.3之后,所有模块都具有__loader__属性,而不管是由自定义加载程序加载的。

Python-2.7、3.2:

代码语言:javascript
复制
>>> import xml
>>> hasattr(xml, '__loader__')
False

Python-3.3:

代码语言:javascript
复制
>>> import xml
>>> hasattr(xml, '__loader__')
True
>>> xml.__loader__
<_frozen_importlib.SourceFileLoader object at ...>

如何检测模块是否由自定义加载器加载?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-01 04:51:40

在Python3.3中,简单地检查__loader__属性是否存在是不够的。PEP 302要求所有加载器将其信息存储在模块的__loader__属性中。

我将为type(module.__loader__)添加一个额外的检查,以查看模块是否使用您正在搜索的自定义加载器(或加载器列表)加载:

代码语言:javascript
复制
>>> CUSTOM_LOADERS = [MyCustomLoader1, MyCustomLoader2]
>>> type(xml.__loader__) in CUSTOM_LOADERS
True

从维护的角度来看,这可能很糟糕,因为您必须保持自定义加载器的列表是最新的。另一种类似的方法可能是创建标准内置加载器的列表,并将检查更改为not in STANDARD_LOADERS。不过,这仍然会有维护问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13135280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档