看了很多文章,有很多介绍的很详细。但一直都不能正确使用,总是出现这样那样的问题。但学到了很多名词和描述。
继续和AI对话过程中,找到了解决方案。这里只针对个人问题做一个记录。
npz_data是一个字典,
方案2原因:由于它在函数内,所以在exec函数里添加globals(),也是错的。
但在此基础上,问了AI几个问题,就得到了正确方案。
- 如果把exec命令封装于一个函数内部,则会报变量未被定义的错误。有没有其它的方法,可以解决这个问题
- 有没有与exec类似功能的函数或包,可以替代它
- for key in npz_data: # .files
exec(f"{key} = npz_data[‘{key}’]")
用eval函数实现以上代码的功能 - eval(f"{key} = npz_data[‘{key}’]")
File “”, line 1
up_pair_idx = npz_data[‘up_pair_idx’]
^
SyntaxError: invalid syntax
正确答复:
根据你提供的错误追踪信息,问题出现在以下这行代码:
eval(f"{key} = npz_data['{key}']")
这是因为在eval函数中,你试图执行一个赋值操作,但这不是有效的Python语法。eval函数只能用于执行表达式,而不能执行赋值语句。
如果你想将npz_data字典中的值赋给相应的变量名,你可以使用字典解析来实现。这里是一个示例:
for key in npz_data: globals()[key] = npz_data[key]
这里,globals()函数返回当前全局符号表,然后我们通过key将npz_data中的值赋给全局变量。
但是,请注意,这种方法可能会导致命名冲突和意外的副作用,因为它直接修改了全局符号表。更好的做法是使用一个临时字典来存储结果,或者创建一个新的命名空间来存储这些变量。
def update_mark2npz(self, prd_uni):npz_data, df = self.read_npz(prd_uni)# 方案1:失败# for key in npz_data: # exec(f"{key} = npz_data['{key}']")# 方案2:失败# for key in npz_data: # exec(f"{key} = npz_data['{key}']", globals())# 方案3:失败# for key in npz_data: # eval(f"{key} = npz_data['{key}']") for key in npz_data:globals()[key] = npz_data[key]