当前位置: 首页 > 面试题库 >

如何检查是否已导入python模块?

毕宇
2023-03-14
问题内容

如何检查我是否在代码中的某个位置导入了模块?

 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语句有两件事:

  1. 如果模块之前从未导入过(=中不存在= sys.modules),则将其加载并添加到中sys.modules
  2. 在当前名称空间中绑定1个或多个引用模块对象或模块名称空间成员的对象的名称。

该表达式modulename not in sys.modules测试步骤1是否已发生。测试步骤2的结果需要知道使用了什么确切的import语句,因为它们设置了不同的名称来引用不同的对象:

  • import modulenamemodulename = sys.modules['modulename']
  • import packagename.nestedmodulepackagename = sys.modules['packagename'](无论您添加多少个附加级别)
  • import modulename as altnamealtname = sys.module['modulename']
  • import packagename.nestedmodule as altnamealtname = sys.modules['packagename.nestedmodule']
  • from somemodule import objectnameobjectname = sys.modules['somemodule'].objectname
  • from packagename import nestedmodulenamenestedmodulename = sys.modules['packagename.nestedmodulename'](仅当此导入之前nestedmodulenamepackagename名称空间中没有命名对象时,此刻嵌套模块的其他名称才添加到父包名称空间)
  • from somemodule import objectname as altnamealtname = sys.modules['somemodule'].objectname
  • from packagename import nestedmodulename as altnamealtname = sys.modules['packagename.nestedmodulename'](仅当此导入之前nestedmodulenamepackagename名称空间中没有命名对象时,此刻嵌套模块的其他名称才添加到父包名称空间)

您可以测试给定名称空间中是否存在与导入对象绑定的名称:

# 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如果您需要排除此后名称已完全设置为其他名称,则可以进一步自省该对象或测试该对象是否与所提供的对象相同。



 类似资料:
  • 问题内容: 如何测试是否已在python中导入模块? 例如,我需要基础知识: 也 谢谢! 感谢您的所有评论 问题答案: 如果您不想通过两次导入来进行优化,请避免麻烦,因为Python已经解决了这一问题。 如果您 需要 避免此类情况:修正草率的编码- 确保不需要,即在使用之前定义(导入)所有内容(在导入的情况下:一次,在启动时,在模块级别) 。 如果您确实有充分的理由:是一个包含所有已导入到某处的模

  • 问题内容: 我想控制是否退出,但是找不到解决方法。 我还探讨了的属性,但是找不到任何特定的方法来获取有关驱动程序状态的信息。还要检查会话ID: 问题答案: 如果您探索python- selenium驱动程序的源代码,则将看到firefox驱动程序的方法在做什么: 您可以在此处依赖某些内容:检查是否存在或检查状态。它可以工作,但是您还可以看到只有“外部调用”,并且 在python端没有任何改变 可以

  • 问题内容: 我正在使用线程和队列模块在Python中编写一个简单的搜寻器。我获取一个页面,检查链接并将它们放入队列中,当某个线程完成页面处理后,它将从队列中获取下一个页面。我对已经访问过的页面使用数组,以过滤添加到队列的链接,但是如果有多个线程并且它们在不同页面上获得相同的链接,则会将重复的链接放入队列。那么,如何确定队列中是否已经有一些url以避免再次放置? 问题答案: 如果您不关心项目的处理顺

  • 问题内容: 我有一个名为Person的表,一个名为ID的列,如何检查ID是否已经是FOREIGN KEY,原因是我想使用以下代码进行修改: 但是如果ID已经是FOREIGN KEY,则由于有两个级联的情况,它给我以下错误“可能导致循环或多个级联路径” …如何检查此字段是否为FOREIGN KEY以避免此错误? 问题答案: 您想看一下视图 虽然还不如应有的完整。这是您想要的最终查询: 浏览此处获取更

  • 以下是示例代码: (由于某种原因,这里的窗户关闭了) 回溯(最后一次调用):文件“/usr/local/lib/python2.7/dist packages/selenium/webdriver/firefox/webdriver.py”第183行中的“文件”,第1行。退出(self)文件“/usr/local/lib/python2.7/dist packages/selenium/webdr

  • 问题内容: 我试图找到一种聪明的方法来找出传递给sed的文件是否已成功更改。 基本上,我想知道文件是否已更改,而不必查看文件修改日期。 我之所以需要这样做,是因为如果sed成功替换了模式,我需要做一些额外的事情。 我目前有: 上面的代码有点贵,我希望能够在这里使用一些技巧。 问题答案: 您可以改用: ” 我忽略了该功能:您可以根据需要使用Shell做重定向。 叹。下面有许多评论要求提供有关shel