Extended import with a function in Python
这是我在Wesley Chun的"核心python编程"中的CS家庭作业-练习12-6。目的是模仿扩展导入,使用类似于import ... as未实现的函数。这是我的尝试,两者都会产生错误:
1 2 3 4 5 6 7
| def importAs(name):
eval('import '+name)
ret = eval(name)
eval('del '+name)
return ret
foo = importAs('os') |
这在File"", line 1中产生SyntaxError: invalid syntax在import os处,而:
1 2 3 4 5 6 7
| def importAs(name):
import name
ret = name
del name
return ret
foo = importAs(os) |
在foo = importAs(os)处生成NameError: name 'os' is not defined。
有人能解释原因和解决办法吗?
编辑:请只保留2.x:)
eval只能计算表达式。而EDOCX1[1]是一个声明,所以它不起作用。
您应该使用importlib模块来完成您的任务。
还可以查看eval以导入模块
- 你指的是我的哪些代码块?如果是第二个,那么在改为foo = importAs('os')之后,我得到下面的错误:ImportError: No module named name在import name在importAs中。
- 好吧,我可能错了。我需要深入研究一下。)
- 看看我的新答案
- 好吧,那是可行的,但是正如书中没有提到的,这可能不是最好的解决办法。你能告诉我第二次尝试有什么问题吗?
- 对。在您尝试使用之前,没有定义os。您可以阅读docs.python.org/2/reference/…,以查看正确的语法。
- 我可以看到它不在名称空间中,因此出现了错误。我现在要和exec和解,但希望我以后能找到一种方法来传递一个模块作为参数。