检查参数是否是Python模块?

cul*_*rón 36 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
Run Code Online (Sandbox Code Playgroud)

我可以做这个:

>>> type(os)
<type 'module'>    
Run Code Online (Sandbox Code Playgroud)

但我该怎么比较呢?:(

我已经创建了一个简单的模块来快速查找模块中的方法并获取它们的帮助文本.我为我的方法提供了一个模块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])
Run Code Online (Sandbox Code Playgroud)

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

Len*_*bro 70

from types import ModuleType

isinstance(obj, ModuleType)
Run Code Online (Sandbox Code Playgroud)


Den*_*ach 30

>>> import inspect, os
>>> inspect.ismodule(os)
True
Run Code Online (Sandbox Code Playgroud)


Gre*_*ill 7

这似乎有点hacky,但是:

>>> import sys
>>> import os
>>> type(os) is type(sys)
True
Run Code Online (Sandbox Code Playgroud)

  • 呵呵,在标准库中,模块`types`,发现:`ModuleType = type(sys)`:) (10认同)