2014-10-04 2 views
0

Это мое домашнее задание в CS - Упражнение 12-6 в «Программе ядрового питона Уэсли Чуна». Цель состоит в том, чтобы имитировать расширенный импорт с помощью функции, например, когда import ... as не был реализован. Это мои попытки, оба из которых дают ошибки:Расширенный импорт с функцией в Python

def importAs(name): 
    eval('import '+name) 
    ret = eval(name) 
    eval('del '+name) 
    return ret 

foo = importAs('os') 

Это дает SyntaxError: invalid syntax на import os в File "<string>", line 1, в то время как:

def importAs(name): 
    import name 
    ret = name 
    del name 
    return ret 

foo = importAs(os) 

дает NameError: name 'os' is not defined на foo = importAs(os).

Может ли кто-нибудь объяснить причину и решение, пожалуйста?

EDIT: Пожалуйста, держите его 2.x только :)

+0

возможно дубликат [Eval импортировать модуль] (http://stackoverflow.com/questions/17136772/eval-to-import-a-module) –

ответ

1

eval можно оценить только выражение. И import - это заявление, поэтому оно не сработает.

Вы должны использовать модуль importlib для своей задачи.

Также обратите внимание на eval to import a module

+0

Какой из моих кодовые блоки, на которые вы ссылаетесь? Если это второй, то после его изменения на 'foo = importAs ('os')', я получаю следующую ошибку: 'ИмпортError: Нет имени с именем' в 'import name' в' importAs'. – underlandian

+0

ОК, я, вероятно, ошибался. Мне нужно копать в нем :) –

+0

см. Мой новый ответ –

 Смежные вопросы

  • Нет связанных вопросов^_^