2009-10-10 6 views
23

¿Cómo puedo (pythonically) verificar si un parámetro es un módulo de Python? No hay ningún tipo de módulo o paquete.¿Comprueba si un parámetro es un módulo de 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 

Puedo hacer esto:

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

Pero, ¿qué puedo compararlo? . :(

He hecho un módulo sencillo para encontrar rápidamente métodos en módulos y obtener los textos de ayuda para ellos que suministrar una var módulo y una cadena a mi método:

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]) 

Por supuesto, esta voluntad trabajar incluso si el módulo = 'abc': luego dir ('abc') me dará la lista de métodos para el objeto de cadena, pero no es necesario que

+0

Conoce el método help() y pydoc y esfuerzos similares, ¿no? –

+0

pydoc es un poco diferente. Necesitaba una forma simple de encontrar un método sin saber su nombre exacto. Por ejemplo, algo que tiene 'tamaño' en os.path. –

+0

¿No puedes Pato Escribir un módulo? ¿Para qué lo necesitas? Solo inténtalo y atrapa la excepción si falla. – u0b34a0f6ae

Respuesta

50
from types import ModuleType 

isinstance(obj, ModuleType) 
+0

Utilice la sangría para marcarlo como código. +1 sin embargo, no sabía esto. –

+3

¡Hah! ¿Quién dio -1 en esto?!? La gente es divertida –

+0

Acaba de repetir lo que dije antes, y mi respuesta fue más completa al sugerir por qué este código es pitónico. En realidad, no debería votar en contra de tu respuesta, lo siento. –

4

Esto parece un poco hacky, pero:.

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

Sí, no está del todo limpio. –

+7

Hehe, en la biblioteca estándar, módulo 'types', encontró esto:' ModuleType = type (sys) ':) – kolypto

25
>>> import inspect, os 
>>> inspect.ismodule(os) 
True 
Cuestiones relacionadas