2013-06-16 28 views
12

Nie mogę zaimportować modułu przy użyciu funkcji eval().eval, aby zaimportować moduł

Tak, mam funkcję, gdzie jeśli robię import vfs_tests as v to działa. Jednak ten sam import z użyciem eval(), taki jak eval('import vfs_tests as v'), powoduje błąd składni.

Dlaczego tak się dzieje?

Odpowiedz

26

Zastosowanie exec:

exec 'import vfs_tests as v' 

eval działa tylko na wyrażeniach import to stwierdzenie.

exec jest funkcją w Pythonie 3: exec('import vfs_tests as v')

Aby zaimportować moduł używając ciąg należy użyć importlib moduł:

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

w Pythonie 2.6 i wcześniej użyć __import__.

+4

Słowo ostrzeżenia: exec jest bardzo potężny. Jeśli część łańcucha, który wykonujesz, pochodzi z niezaufanego źródła, to exec jest również bardzo niebezpieczny. –

+0

Z __import__ dla py <= 2.6, zauważ, że nie zostawia zaimportowanej nazwy zdefiniowanej, jak zwykły import. – TextGeek

Powiązane problemy