检查参数是否为Python模块?

vc9ivgsu  于 2023-02-28  发布在  Python
关注(0)|答案(7)|浏览(82)

我怎样才能检查一个参数是否是Python模块呢?没有模块或包这样的类型。

>>> os
<module 'os' from '/usr/lib/python2.6/os.pyc'>

>>> isinstance(os, module)
Traceback (most recent call last):
  File "/usr/lib/gedit-2/plugins/pythonconsole/console.py", line 290, in __run
    r = eval(command, self.namespace, self.namespace)
  File "<string>", line 1, in <module>
NameError: name 'module' is not defined

我可以这样做:

>>> type(os)
<type 'module'>

但是我该拿它和什么相比呢?
我做了一个简单的模块来快速查找模块中的方法并获取它们的帮助文本,我为我的方法提供了一个模块变量和一个字符串:

def gethelp(module, sstring):

    # here i need to check if module is a module.

    for func in listseek(dir(module), sstring):
        help(module.__dict__[func])

当然,即使module ='abc',这也会起作用:那么dir('abc ')会给我字符串对象的方法列表,但我不需要它。

zsbz8rwp

zsbz8rwp1#

from types import ModuleType

isinstance(obj, ModuleType)
qlvxas9a

qlvxas9a2#

>>> import inspect, os
>>> inspect.ismodule(os)
True
72qzrwbm

72qzrwbm3#

这看起来有点古怪,但是:

>>> import sys
>>> import os
>>> type(os) is type(sys)
True
1wnzp6jl

1wnzp6jl4#

“格雷格·休吉尔”和“伦纳特·雷格布罗”的混合回答:

>>> from types import ModuleType
>>> import os
>>> type(os) is ModuleType
True
disbfnqx

disbfnqx5#

将模块扁平化为字符串,并检查它是否以'<module '开头

import matplotlib
foobarbaz = "some string"
print(str(matplotlib).startswith("<module "))     #prints True
print(str(foobarbaz).startswith("<module "))      #prints False

缺点是这可能与以文本'<module'开头的python字符串冲突,您可以尝试使用正则表达式对其进行更强的分类。

wydwbb8l

wydwbb8l6#

有两种方法无法导入任何模块:

  • type(os) is type(__builtins__)
  • str(type(os)).find('module')>-1
kulphzqa

kulphzqa7#

另一种不用导入任何东西的方法是将其设为字符串并直接与输出进行比较:

import os

print(str(type(os)))  #Prints "<class 'module'>"

print(str(type(os))) == "<class 'module'>")  #Prints True

相关问题