全局__builtin__的名称空间与模块名称空间冲突

时间:2015-01-27 15:27:44

标签: python string namespaces built-in

我编写了一个简单的函数,允许我用变量类型解析一个字符串(遵循此SO问题Lexical cast from string to type中描述的方法)。我有一个名为 ascii_tools 的模块,它包含以下函数:

def get_builtin(name):
    return getattr(__builtins__, name)

因此,其工作原理如下。

get_builtin(desired_type)(some_input_string)

这解析了我的字符串for desired_type ='float'或'int',为一些需要字符串解析的应用程序节省了一些硬编码。

当我将get_builtin函数直接定义到python解释器时,此函数表现正常。但是,当我尝试通过ascii_tools.get_builtin('float')调用此函数时,我收到以下错误:

AttributeError: 'dict' object has no attribute 'float'

'int'输入发生相同的错误。这看起来很奇怪,因为该方法在解释器的全局命名空间中定义时工作得很好。所以我检查了pdb的输出,即:

NameError: name 'ascii_tools' is not defined

这必须与 builtins 的命名空间有关。也许调用 builtins 以某种方式检查调用嵌套的模块的命名空间,这是否会导致问题?

0 个答案:

没有答案