我有这个代码与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())
答案 0 :(得分:1)
因为你的函数没有哈希的赋值,python假设在编译它时哈希是一个全局变量。但是,在为exec编译字符串时,你确实有一个哈希的赋值,所以python假设它是一个局部变量。因此,您的exec语句分配给本地范围中的变量,但您的print语句在全局范围内查找它。
如果您将其更改为:
,则可能会有效def hashCheck(data):
hashes = None
exec("hashes = {'hi':'hi'}")
print(hashes['hi'])
那就是说,你可能不应该使用exec(),除非你真的知道你在做什么,并确定你需要它。如果你只想要一些人类可读的简单python对象的序列化,你可能想要看一下像yaml这样的东西。