2009-10-10 12 views
23

Come posso verificare (pitonicamente) se un parametro è un modulo Python? Non c'è tipo come modulo o pacchetto.Controlla se un parametro è un modulo 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 

posso fare questo:

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

Ma quello che posso confrontarlo? . :(

Ho fatto un modulo semplice per trovare rapidamente i metodi di moduli e ottenere testi di aiuto per loro mi forniscono un var modulo ed una stringa per il mio metodo:

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

Naturalmente, questa volontà funzionare anche se il modulo = 'abc': quindi dir ('abc') mi darà la lista dei metodi per oggetto stringa, ma non ho bisogno che

+0

Sei a conoscenza del metodo help() e pydoc e sforzi simili, giusto? –

+0

pydoc è un po 'diverso. Avevo bisogno di un modo semplice per trovare un metodo senza sapere il suo nome esatto. Ad esempio, qualcosa che ha 'dimensione' in os.path. –

+0

Can not Duck Digitare un modulo? A cosa ti serve? Provalo e prendi l'eccezione se fallisce. – u0b34a0f6ae

risposta

50
from types import ModuleType 

isinstance(obj, ModuleType) 
+0

Si prega di utilizzare il rientro per contrassegnarlo come codice. +1 però, non lo sapevo. –

+3

Hah! Chi ha dato -1 su questo?!? Le persone sono divertenti –

+0

Hai appena ripetuto quello che ho detto prima, e la mia risposta è stata più completa suggerendo perché questo codice è pitonico. In realtà non dovrei votare contro la tua risposta, mi dispiace. –

4

Questo sembra un po 'hacky, ma:.

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

Sì, non è abbastanza pulito. –

+7

Hehe, nella libreria standard, module 'types', ha trovato questo:' ModuleType = type (sys) ':) – kolypto

25
>>> import inspect, os 
>>> inspect.ismodule(os) 
True 
Problemi correlati