如何使用exec python解决'未定义的全局名称'

时间:2013-12-18 23:01:50

标签: python

我有这个代码与exec抛出错误,我无法让它工作。它适用于 不是在函数中,但

def hashCheck(data):
    exec("hashes = {'hi':'hi'}")  #it was a file import before
    print(hashes['hi'])  #right here is error
    try:
        return(hashes[data]) #and here  is also error
    except KeyError:
        import hashlib
        m = hashlib.md5()
        m.update(data)
        return(m.hexdigest())

1 个答案:

答案 0 :(得分:1)

因为你的函数没有哈希的赋值,python假设在编译它时哈希是一个全局变量。但是,在为exec编译字符串时,你确实有一个哈希的赋值,所以python假设它是一个局部变量。因此,您的exec语句分配给本地范围中的变量,但您的print语句在全局范围内查找它。

如果您将其更改为:

,则可能会有效
def hashCheck(data):
    hashes = None
    exec("hashes = {'hi':'hi'}")
    print(hashes['hi'])

那就是说,你可能不应该使用exec(),除非你真的知道你在做什么,并确定你需要它。如果你只想要一些人类可读的简单python对象的序列化,你可能想要看一下像yaml这样的东西。