2014-10-04 87 views
0

這是我的CS家庭作業 - Wesley Chun的「核心Python編程」中的練習12-6。我們的目標是模擬擴展導入功能,例如import ... as沒有實現。這是我的嘗試,這兩者產生的錯誤:使用Python中的函數進行擴展導入

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

foo = importAs('os') 

這將產生SyntaxError: invalid syntaxFile "<string>", line 1import os,而:

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

foo = importAs(os) 

產生一個NameError: name 'os' is not definedfoo = importAs(os)

有人可以解釋原因和解決方案嗎?

編輯:請保持2.X只:)

+0

可能重複(http://stackoverflow.com/questions/17136772/eval-to-import-a-module) – 2014-10-04 00:44:32

回答

1

eval只能計算表達式。而import是一個聲明,所以它不會工作。

您應該爲您的任務使用importlib模塊。

而且看看eval to import a module

的[EVAL導入模塊]
+0

這是我代碼塊你指的是? 如果是第二個,那麼在將其更改爲'foo = importAs('os')'後,出現以下錯誤: 'ImportError:'import'中的'import name'沒有名爲'name'的模塊。 – underlandian 2014-10-04 00:36:29

+0

好吧,我可能是錯的。我需要深入研究:) – 2014-10-04 00:38:41

+0

看到我的新答案 – 2014-10-04 00:43:21