如何检查是否在代码中的某个位置导入了模块?
if not has_imported("somemodule"):
print('you have not imported somemodule')
我要检查是否已导入模块的原因是因为我有一个我不想导入的模块,因为有时会弄乱我的程序。
测试sys.modules
字典中的模块名称:
import sys
modulename = 'datetime'
if modulename not in sys.modules:
print 'You have not imported the {} module'.format(modulename)
从文档中:
这是将模块名称映射到已经加载的模块的字典。
请注意,import
语句有两件事:
sys.modules
),则将其加载并添加到中sys.modules
。该表达式modulename not in sys.modules
测试步骤1是否已发生。测试步骤2的结果需要知道使用了什么确切的import
语句,因为它们设置了不同的名称来引用不同的对象:
import modulename
套 modulename = sys.modules['modulename']
import packagename.nestedmodule
集packagename = sys.modules['packagename']
(无论您添加多少个附加级别)import modulename as altname
套 altname = sys.module['modulename']
import packagename.nestedmodule as altname
套 altname = sys.modules['packagename.nestedmodule']
from somemodule import objectname
套 objectname = sys.modules['somemodule'].objectname
from packagename import nestedmodulename
集nestedmodulename = sys.modules['packagename.nestedmodulename']
(仅当此导入之前nestedmodulename
在packagename
名称空间中没有命名对象时,嵌套模块的附加名称才会在此时添加到父包名称空间)from somemodule import objectname as altname
套 altname = sys.modules['somemodule'].objectname
from packagename import nestedmodulename as altname
集altname = sys.modules['packagename.nestedmodulename']
(仅当此导入之前nestedmodulename
在packagename
名称空间中没有命名对象时,嵌套模块的附加名称才会在此时添加到父包名称空间)您可以测试给定名称空间中是否存在导入对象绑定到的名称:
# is this name visible in the current scope:
'importedname' in dir()
# or, is this a name in the globals of the current module:
'importedname' in globals()
# or, does the name exist in the namespace of another module:
'importedname' in globals(sys.modules['somemodule'])
这仅告诉您名称存在(已绑定),而不是名称是指特定模块还是该模块中的对象。sys.modules
如果您需要排除此后名称已完全设置为其他名称,则可以进一步自省该对象或测试该对象是否与所提供的对象相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句