2011-07-10 9 views
1

私はPythonで '物'の名前を持っています。私はこの「もの」がモジュールであるかどうかをチェックしたい。私はevalのを呼び出すのアイデアを好きではない何かを決定する良い方法は、Pythonのモジュールです

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

:私は以下のコードでそれを行うことができます。文字列である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') 
関連する問題