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

2023-12-13

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

 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 modulename sets modulename = sys.modules['modulename']
  • import packagename.nestedmodule sets packagename = sys.modules['packagename'](无论您添加多少额外级别)
  • import modulename as altname sets altname = sys.module['modulename']
  • import packagename.nestedmodule as altname sets altname = sys.modules['packagename.nestedmodule']
  • from somemodule import objectname sets objectname = sys.modules['somemodule'].objectname
  • from packagename import nestedmodulename sets nestedmodulename = sys.modules['packagename.nestedmodulename'](仅当没有名为的对象时nestedmodulename in the packagename在此导入之前的命名空间,此时嵌套模块的附加名称将添加到父包命名空间中)
  • from somemodule import objectname as altname sets altname = sys.modules['somemodule'].objectname
  • from packagename import nestedmodulename as altname sets altname = sys.modules['packagename.nestedmodulename'](仅当没有名为的对象时nestedmodulename in the 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,如果您需要排除从那时起该名称已被完全设置为其他名称的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查模块是否已导入? 的相关文章

随机推荐

  • 在php中同时发布和获取

    您对我的问题有什么建议吗 我需要同时使用 get 和 post 获取是因为我需要输出用户输入的内容 并发布 因为我需要访问与该输入相关的 mysql 数据库 它看起来像这样
  • 相当于 Java 中的 CryptoStream .NET?

    我有一个 Visual Basic 中的加密字符串 NET 2008中 加密和解密的函数如下 Imports System Security Cryptography Public Shared Function Encriptar ByV
  • Django Ajax 表单提交错误地重定向到另一个页面

    当我在Django中使用ajax提交评论表单时 页面将重定向到空白页面 显示成功数据 status success msg 添加成功 但不停留在当前页面 我希望页面停留在当前页面并向我显示新评论 这是我的 update comment 视图
  • 当我在 Android 设备上执行“pm”时,为什么会收到分段错误错误?

    我的设备 htcg14 已root 我可以在模拟器上执行 pm 但我的设备无法工作 在我执行 su 之前 它工作正常 shell android pm usage pm list packages f d e s e u FILTER pm
  • 如何在 Android sqlite 中连接列

    我可以在 Android sqlite 中连接两个或更多列吗 例如select columna columnb as columnc from table Try select columna columnb as columnc from
  • 为什么我的 html 不显示从数据库中获取的特殊字符

    我将其包含在我的 php 文件的顶部 我这样做是因为我的 file php 没有在 html 文件中或从数据库查询的数据中显示 或 在我放置 header Content Type text html charset UTF 8 后我的 h
  • Java 格式化剪贴板

    我在尝试弄清楚如何在保存到系统剪贴板时保留 Java 程序中的文本格式时遇到问题 它不适用于 Microsoft 的写字板或 Lotus Symphony 等软件 相反 如果我在 Word 中创建一个格式化字符串并复制它 那么它可以正常用于
  • 在python中将变量写入txt文件的新行

    从其他帖子中 我了解到 n 在添加到 txt 文件时表示新行 我正在尝试这样做 但是当属性位于新行之前时 我无法找出正确的语法 我正在尝试的代码是这样的 for item in list with open file txt w as at
  • 使用 ruby​​gem 访问 Shopify API 时出现 SSL_connect 错误

    我在使用 shopify api gem 访问 Shopify API 时遇到问题 发生的情况如下 gt gt require shopify api gt false gt gt ShopifyAPI Base site https us
  • 有什么方法可以替换 Swift String 上的字符吗?

    我正在寻找一种方法来替换 Swift 中的字符String 示例 这是我的字符串 我想用 替换 以获得 This is my string 我怎样才能实现这个目标 这个答案已经针对 Swift 4 和 5 进行了更新 如果您仍在使用 Swi
  • 在 shell 脚本中的 grep 模式中使用文字 (*)

    我正在尝试评估grepshell 脚本内的表达式 并且 grep 使用字面星号 但该星号似乎被我的 bash 扩展 而不是保留字面星号 branch description git branch list vv grep 我能做什么来跑步g
  • 检测 标签无法加载视频

    我试图捕获以下嵌入标签的错误 在 iPad iOS 上 我尝试用以下方法捕获它 movie1 on onerror function alert error 我也尝试过onabort onstalled onended and onsusp
  • 如何使用 jQuery 或 Javascript 对角滚动

    是否有利用 javascript 或 jQuery 进行对角滚动的项目或插件 例如当您向下滚动内容时 它会被拉到浏览器的左上角 当您向上滚动时 您的内容将被拉到角落的右下角 我看到一些类似的项目 网站 他们在滚动时为元素设置动画 大多数使用
  • 以编程方式检索 Android API 版本

    有没有办法获取手机当前运行的API版本 如 Android 文档中所述 手机运行的 SDK 级别 整数 可用于 android os Build VERSION SDK INT 这个int对应的类在android os Build VERS
  • 如何从 Dask-Yarn 作业中捕获工人的日志?

    我尝试过使用以下内容 config dask distributed yaml and config dask yarn yaml logging file config path to config ini or logging vers
  • 使用 Axios 下载图像并将其转换为 base64

    我需要从远程服务器下载 jpg 图像并将其转换为 base64 格式 我使用 axios 作为我的 HTTP 客户端 我尝试向服务器发出 git 请求并检查response data但它似乎不是那样工作的 链接到 axios https g
  • HttpHandler 和 XML 文件

    我想拦截向服务器发出的任何 XML 文件请求 我认为使用 HttpHandler 可能可以实现 它已编码并且可以工作 仅在本地主机上 那么 为什么它只能在本地主机上运行 这是我的 web config
  • 有什么简单的方法可以解释为什么我不能执行 List Animals = new ArrayList() 吗? [复制]

    这个问题在这里已经有答案了 我知道为什么人们不应该这样做 但有没有办法向外行解释为什么这是不可能的 您可以轻松地向外行人解释这一点 Animal animal new Dog 狗是一种动物 但狗的列表并不是动物的列表 假设您创建了一个列表D
  • 在 msvc 中引用临时文件

    为什么它可以在 MS Visual C 上编译 struct myClass void func myClass arg void main func myClass works even though func only takes my
  • 如何检查模块是否已导入?

    如何检查我是否在代码中的某个位置导入了模块 if not has imported somemodule print you have not imported somemodule 我想检查是否已经导入了模块的原因是因为我有一个不想导入的