2011-07-10 217 views
1

我在python中有一個'thing'的名字。我想檢查這個'東西'是否是一個模塊。我可以用下面的代碼:有沒有更好的方法來確定是python中的一個模塊

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

我不喜歡調用eval的想法。有沒有更好的方法從module_name(字符串)獲取到實際的模塊對象?

+0

你是什麼意思的「事物的名稱」。你有一個字符串是模塊名稱嗎?你有一個變量,並且想檢查變量是否是一個模塊?澄清,請。 –

回答

2

剛剛嘗試集結在__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

雖然find_module是一個更好的解決方案,但感謝提醒我關於'__import__'。我只是將'exec('import%s'替換爲'%var')。 – raylu

-1

的 '東西' 使用dir()

dir(something) 
+1

如果它是一個字符串,這將不起作用。即使它是一個模塊,它本身也不會做任何事情。 – delnan

+0

並檢查什麼? –

+0

這根本不回答問題。在一個字符串上的Dir將給我的字符串類的信息,而不是名稱在字符串中的模塊。 – Johan

0
import datetime 
from types import ModuleType 

print type(datetime) == ModuleType 

編輯:對不起,誤解了這個問題。 「事物的名稱」不是這個例子使用的。

3

更好的是,忘記__import__'它只是看看它是否存在。 :)

現在,我不知道這是否實際上更快,但是這是我會做的。無論如何,__import__的核心使用imp.find_module()

import imp 
try: 
    imp.find_module('module') 
except ImportError: 
    import sys 
    sys.exit('No such module') 
相關問題