[英]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.