虽然已导入模块,但未定义全局名称

时间:2012-11-28 17:15:17

标签: python module python-2.7

我正在调用一个函数(read_param),它依赖于来自主脚本(master.py)的文件(libfun.py)中定义的're'模块。当我这样做时,我得到一个NameError:

NameError: global name 're' is not defined

我在主脚本中导入're'模块,但似乎我导入的模块中的函数无法使用它。我不想从函数本身导入're',因为这看起来很浪费。为什么会这样?

(这是一个最小的例子,而不是我的实际代码):

libfun.py:

def read_param(paramname, paramfile):
    # code here depends on re module, e.g. calling re.split()

master.py:

#!/usr/bin/env python2

import re
import libfun as lf

lf.read_param('parameter', 'filename')

1 个答案:

答案 0 :(得分:4)

你正在向后看这个问题。模块应该是自包含的,因此他们需要管理所有自己的依赖项。

想象一下,如果您有十五个不同的脚本,所有脚本都使用readparam()。将每个脚本强制为import re,只使用readparam()是没有意义的。您最终会导入十五次,并且您需要阅读文档或源文件,甚至知道您必须导入它。

正确的方法是import re顶部的libfun.py。您不需要在master.py中导入它,除非您在re的正文中使用master.py