2009-10-10 16 views
23

Jak mogę (python) sprawdzić, czy parametr jest modułem Pythona? Nie ma typu, takiego jak moduł czy paczka.Sprawdź, czy parametr jest modułem 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 

mogę to zrobić:

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

Ale co mogę porównać to do? . :(

Zrobiłem prosty moduł do szybkiego znalezienia metod w modułach i uzyskać pomoc dla nich teksty I dostarczyć var ​​modułu i ciąg do mojej metody:

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

oczywiście, będzie to działać, nawet jeśli moduł = „abc”: wtedy dir („abc”) da mi listę metod obiektu String, ale nie trzeba, że ​​

+0

Jesteś świadomy metody help() i metody pydoc i podobnych działań, prawda? –

+0

pydoc jest nieco inny. Potrzebowałem prostego sposobu na znalezienie metody bez znajomości dokładnej nazwy. Na przykład coś, co ma "rozmiar" w os.path. –

+0

Can not you Duck Wpisz moduł? Do czego ci to potrzebne? Po prostu spróbuj tego i złap wyjątek, jeśli się nie powiedzie. – u0b34a0f6ae

Odpowiedz

50
from types import ModuleType 

isinstance(obj, ModuleType) 
+0

Proszę użyć wcięcia, aby oznaczyć go jako kod. +1, nie wiedziałem tego. –

+3

Hah! Kto dał -1 na ten temat?!? Ludzie są zabawni. –

+0

Po prostu powtórzyłeś to, co powiedziałem wcześniej, a moja odpowiedź była pełniejsza, sugerując, dlaczego ten kod jest pythonic. Właściwie nie powinienem głosować przeciwko twojej odpowiedzi, przepraszam. –

4

To wydaje się nieco hacky, ale.

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

Tak, to nie jest całkiem czyste. –

+7

Hehe, w standardowej bibliotece, moduł 'types', stwierdził:' ModuleType = type (sys) ':) – kolypto

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