2011-07-10 3 views
1

J'ai le nom d'une «chose» en python. Je veux vérifier si cette 'chose' est un module ou non. Je peux le faire avec le code ci-dessous:Y a-t-il une meilleure façon de déterminer quelque chose est un module en python

mod = eval(module_name) 
print inspect.ismodule(mod) 

Je n'aime pas l'idée d'appeler eval. Existe-t-il un meilleur moyen d'obtenir du module_name, qui est une chaîne, à l'objet module réel?

+0

Qu'entendez-vous par "le nom d'une 'chose'". Avez-vous une chaîne qui est un nom de module? Avez-vous une variable, et voulez-vous vérifier si la variable est un module? Clarifiez, s'il vous plaît. –

Répondre

2

Juste essayer de construire en __import__ fonction:

>>> __import__('aaa') 

Traceback (most recent call last): 
    File "<pyshell#5>", line 1, in <module> 
    __import__('aaa') 
ImportError: No module named aaa 
>>> __import__('os') 
<module 'os' from 'C:\Python26\lib\os.pyc'> 

donc votre code pourrait ressembler suivant:

try: 
    __import__(mod_name) 
    print 'Such a module exists' 
except ImportError: 
    print 'No such module' 
+0

Alors que find_module est une meilleure solution, merci de me rappeler de '__import__'. Je viens de remplacer un exec ('import% s par quelque chose'% var) '. – raylu

-1

Utilisez dir() sur la 'chose':

dir(something) 
+1

Si c'est une chaîne, cela ne fonctionnera pas. Et même si c'est un module, cela ne fait rien. – delnan

+0

Et vérifiez quoi? –

+0

Cela ne répond pas à la question du tout. Dir sur une chaîne me donnerait l'information pour la classe de chaîne pas le module dont le nom est dans la chaîne. – Johan

0
import datetime 
from types import ModuleType 

print type(datetime) == ModuleType 

Edit: Désolé, mal lu la question. "nom d'une chose" n'est pas ce que cet exemple utilise.

3

Mieux encore, oubliez __import__ et voyez s'il existe. :)

Maintenant, je ne sais pas si c'est en réalité beaucoup plus rapide, mais c'est ce que je ferais. __import__ à la base utilise imp.find_module() de toute façon.

import imp 
try: 
    imp.find_module('module') 
except ImportError: 
    import sys 
    sys.exit('No such module') 
Questions connexes