我编写了一个简单的函数,允许我用变量类型解析一个字符串(遵循此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 以某种方式检查调用嵌套的模块的命名空间,这是否会导致问题?