2013-06-16 17 views
12

Non riesco a importare un modulo utilizzando la funzione eval().eval per importare un modulo

Quindi, ho una funzione dove se faccio import vfs_tests as v funziona. Tuttavia, la stessa importazione utilizzando eval() come eval('import vfs_tests as v') genera un errore di sintassi.

Perché è così?

risposta

26

Uso exec:

exec 'import vfs_tests as v' 

eval funziona solo su espressioni, import è una dichiarazione.

exec è una funzione in Python 3: exec('import vfs_tests as v')

Per importare un modulo utilizzando una stringa si dovrebbe usare importlib modulo:

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

In Python 2.6 e precedenti usare __import__.

+4

Un avvertimento: exec è molto potente. Se parte della stringa che stai eseguendo proviene da una fonte non attendibile, exec è anche estremamente pericoloso. –

+0

Con __import__ per py <= 2.6, nota che non lascia il nome importato definito, come farebbe un'importazione normale. – TextGeek

Problemi correlati