2013-06-16 7 views
12

Ich kann ein Modul nicht importieren, das die eval() Funktion verwendet.eval, um ein Modul zu importieren

Also, ich habe eine Funktion, wenn ich import vfs_tests as v es funktioniert. Derselbe Import, der eval() wie eval('import vfs_tests as v') verwendet, löst jedoch einen Syntaxfehler aus.

Warum ist das so?

Antwort

26

Verwendung exec:

exec 'import vfs_tests as v' 

eval funktioniert nur auf Ausdrücke, ist import eine Aussage.

exec ist eine Funktion in Python 3: exec('import vfs_tests as v')

ein Modul zu importieren, eine Zeichenfolge verwenden Sie importlib Modul verwenden sollten:

import importlib 
mod = importlib.import_module('vfs_tests') 

In Python 2.6 und früher verwenden __import__.

+4

Ein Wort der Warnung: Exec ist sehr mächtig. Wenn ein Teil der Zeichenfolge, die Sie ausführen, von einer nicht vertrauenswürdigen Quelle stammt, ist exec auch extrem gefährlich. –

+0

Beachten Sie bei __import__ for py <= 2.6, dass der importierte Name nicht definiert wird, wie bei einem normalen Import. – TextGeek

Verwandte Themen