Есть ли лучший способ определить что-то модуль в Python - PullRequest
1 голос
/ 10 июля 2011

У меня есть имя «вещь» в Python.Я хочу проверить, является ли эта «вещь» модулем или нет.Я могу сделать это с помощью приведенного ниже кода:

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

Мне не нравится идея вызова eval.Есть ли лучший способ получить от имени модуля, которое является строкой, к фактическому объекту модуля?

Ответы [ 4 ]

3 голосов
/ 10 июля 2011

Еще лучше, забудьте про __import__ и посмотрите, существует ли он.:)

Так вот, я не знаю, намного ли это быстрее, но я бы так и сделал.__import__ в ядре использует imp.find_module() в любом случае.

import imp
try:
    imp.find_module('module')
except ImportError:
    import sys
    sys.exit('No such module')
2 голосов
/ 10 июля 2011

Просто попробуйте встроенную __import__ функцию:

>>> __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'>

Итак, ваш код может выглядеть следующим образом:

try:
    __import__(mod_name)
    print 'Such a module exists'
except ImportError:
    print 'No such module'
0 голосов
/ 10 июля 2011
import datetime
from types import ModuleType

print type(datetime) == ModuleType

Редактировать: Извините, неправильно прочитал вопрос.«имя вещи» не то, что использует этот пример.

0 голосов
/ 10 июля 2011

Используйте dir() на «вещи»:

dir(something)
...