2009-10-10 8 views
23

Comment puis-je (pythoniquement) vérifier si un paramètre est un module Python? Il n'y a pas de type comme module ou paquet.Vérifie si un paramètre est un module 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 

Je peux le faire:

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

Mais que dois-je le comparer? . :(

J'ai fait un module simple de trouver rapidement des méthodes de modules et d'obtenir des textes d'aide pour eux-je fournir un module var et une chaîne à ma méthode:

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

Bien sûr, cela travailler même si le module = « abc »: puis dir (« abc ») me donnera la liste des méthodes pour objet chaîne, mais je ne pas besoin que

+0

Vous êtes au courant de la méthode help() et pydoc et des efforts similaires, non? –

+0

pydoc est un peu différent. J'avais besoin d'un moyen simple de trouver une méthode sans connaître son nom exact. Par exemple, quelque chose qui a 'size' dans os.path. –

+0

Can not you Duck Tapez un module? Qu'est-ce que vous en avez besoin? Essayez juste cela et attrapez l'exception si elle échoue. – u0b34a0f6ae

Répondre

50
from types import ModuleType 

isinstance(obj, ModuleType) 
+0

Veuillez utiliser indent pour le marquer comme code. +1 cependant, ne le savais pas. –

+3

Hah! Qui a donné -1 à ce sujet?!? Les gens sont drôles. –

+0

Vous venez de répéter ce que j'ai dit plus tôt, et ma réponse était plus complète, suggérant pourquoi ce code est pythonique. En fait, je ne devrais pas voter contre votre réponse, désolé. –

4

Cela semble un peu hacky, mais:.

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

Oui, ce n'est pas tout à fait propre. –

+7

Hehe, dans la bibliothèque standard, module 'types', a trouvé ceci:' ModuleType = type (sys) ':) – kolypto

25
>>> import inspect, os 
>>> inspect.ismodule(os) 
True 
Questions connexes