导入*导致“全局名称'emailtools'未定义”

时间:2013-10-20 22:14:59

标签: python google-app-engine exception python-import nameerror

有一些我无法解决的appengine代码有点问题(可能只是因为它已经晚了)

我有一个名为modules的文件夹,其中包含以下项目:

-modules
 : __init__.py (blank)
 : checklogin.py
 : customhandlers.py
 : datastoretools.py
 : emailtools.py

在我的代码中我使用了所有这些,因此我这样做是为了导入它们:

from modules import *

一切都可以吧电子邮件工具。这样:

emailtools.sendNotificationEmail('assignee',report,True)

导致此错误:

File "/home/tom/dev/ad-project/handlers/reporterhandler.py", line 42, in get
emailtools.sendNotificationEmail('assignee',report,True)
NameError: global name 'emailtools' is not defined

这种情况发生在我尝试使用它的任何地方,但其他三个工作完全正常,任何想法为什么?或者我应该只导入它们而不是使用*?

1 个答案:

答案 0 :(得分:1)

这根本不起作用。似乎这个通配符并不是您使用过的唯一通配符。也许其他模块来自其他通配符。

在任何情况下,通配符都是不受欢迎的 根据{{​​1}}:

  

应该避免使用通配符导入(来自import *),因为它们不清楚命名空间中存在哪些名称,这会使读者和许多自动化工具混淆。通配符导入有一个可防御的用例,即将内部接口重新发布为公共API的一部分(例如,使用可选加速器模块中的定义覆盖接口的纯Python实现,以及确切的定义将是被覆盖的事先不知道)。

P.S。我假设你使用了Windows,否则我认为PEP 8无法导入Modules