如何检查是否在代码中的某个位置导入了模块
如果没有导入(“somemodule”):
打印('您尚未导入某个模块')
我想检查我是否已经导入了一个模块,是因为我有一个模块我不想导入,因为有时它会弄乱我的程序
在sys.modules字典中测试模块名称:
导入系统
modulename=’datetime’
如果sys.modules中没有modulename:
打印“您尚未导入{}模块”。格式(modulename)
从文档中:
这是一个将模块名称映射到已加载模块的字典
请注意,import语句做两件事:
- 如果以前从未导入过该模块(=不存在于
sys.modules),则会将其加载并添加到sys.modules - 在当前命名空间中绑定一个或多个引用模块对象的名称,或绑定到属于模块命名空间成员的对象
表达式modulename不在sys.modules中测试步骤1是否已发生。测试步骤2的结果需要知道使用了什么确切的import语句,因为它们设置了不同的名称来引用不同的对象:
import modulename设置modulename=sys.modules['modulename']import packagename.nestedmodule设置packagename=sys.modules['packagename'](无论添加多少附加级别)import modulename as altnamesetaltname=sys.module['modulename']将packagename.nestedmodule作为altname导入设置altname=sys.modules['packagename.nestedmodule']从somemodule导入objectname设置objectname=sys.modules['somemodule'].objectname从packagename导入nestedmodulename设置nestedmodulename=sys.modules['packagename.nestedmodulename'](只有在导入之前,packagename命名空间中没有名为nestedmodulename的对象时,嵌套模块的附加名称才会添加到父包命名空间中)从somemodule将objectname导入为altname设置altname=sys.modules['somemodule'].objectname从packagename导入nestedmodulename作为altname设置altname=sys.modules['packagename.nestedmodulename'](只有在导入之前,packagename命名空间中没有名为nestedmodulename的对象时,嵌套模块的附加名称才会添加到父包命名空间中)
您可以测试导入对象绑定到的名称是否存在于给定命名空间中:
#此名称在当前范围内可见吗:
目录()中的“importedname”
#或者,这是当前模块全局中的名称:
globals()中的“importedname”
#或者,名称是否存在于另一个模块的命名空间中:
全局变量中的“importedname”(sys.modules['somemodule'])
这只会告诉您名称是否存在(已绑定),而不是它是否引用某个特定模块或该模块中的对象。如果需要排除该名称已完全设置为其他名称,则可以进一步内省该对象或测试它是否与sys.modules中的可用对象相同