繁体   English   中英

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

[英]How to solve 'global name not defined' with exec 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())

由于您的函数没有分配给哈希,因此python在编译时假定哈希是全局变量。 但是,在为exec编译字符串时,您确实为哈希指定了赋值,因此python假定它是局部变量。 因此,您的exec语句分配给局部作用域中的变量,但是您的print语句在全局作用域中寻找它。

如果将其更改为以下内容,则可能会起作用:

def hashCheck(data):
    hashes = None
    exec("hashes = {'hi':'hi'}")
    print(hashes['hi'])

也就是说,除非您真的知道自己在做什么并且确定需要它,否则可能不应该使用exec()。 如果只想对简单的python对象进行一些人类可读的序列化操作,则可以改用yaml之类的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM