检查参数是否是Python模块?

时间:2009-10-10 09:18:38

标签: python types

我如何(pythonically)检查参数是否是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'>    

但我该如何比较呢? :(

我已经制作了一个简单的模块来快速查找模块中的方法并获取它们的帮助文本。我为我的方法提供了一个模块var和一个字符串:

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')会给我一个字符串对象的方法列表,但我不需要。

6 个答案:

答案 0 :(得分:66)

from types import ModuleType

isinstance(obj, ModuleType)

答案 1 :(得分:30)

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

答案 2 :(得分:7)

这看起来有点笨拙,但是:

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

@Greg Hewgill@Lennart Regebro组成的答案:

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

答案 5 :(得分:0)

两种方法,您不能导入任何模块:

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