Python exec 命令在函数内执行无效,已解决

看了很多文章,有很多介绍的很详细。但一直都不能正确使用,总是出现这样那样的问题。但学到了很多名词和描述。
继续和AI对话过程中,找到了解决方案。这里只针对个人问题做一个记录。

npz_data是一个字典,
方案2原因:由于它在函数内,所以在exec函数里添加globals(),也是错的。

但在此基础上,问了AI几个问题,就得到了正确方案。

  1. 如果把exec命令封装于一个函数内部,则会报变量未被定义的错误。有没有其它的方法,可以解决这个问题
  2. 有没有与exec类似功能的函数或包,可以替代它
  3. for key in npz_data: # .files
    exec(f"{key} = npz_data[‘{key}’]")
    用eval函数实现以上代码的功能
  4. 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]

修.240112

还是不能在函数内修改,只能调用。
想修改还是要再次global var1…
所以仅调用,可以方便使用。但如果要做修改,还是常规引用吧。
有时候优化代码会上瘾,这里先自我妥协了**-_-!!!**

你可能感兴趣的:(python,开发语言)