我正在尝试使用exec和eval函数编写代码以从numpy .npz文件读取变量列表。
当我运行代码而不将其定义为函数def时,代码就起作用了。但是,当我将代码作为函数运行时,即read_file_npz(“ file_address”),python 3.7一直弹出消息,提示未定义Templet_1h。
def read_file_npz(file_names_2):
import numpy as np
Delete_elements=["arr_0"]
evaluate_1= "templet_1h=np.load(\"./" +file_names_2+ ".npz\")";
exec(evaluate_1)
for i in (templet_1h.files):
if not ( (i in Delete_elements) ):
evaluate_2="global "+i;
exec(evaluate_2)
evaluate_2= i+"="+"templet_1h[\"" + i + "\"]";
exec(evaluate_2)
警告出了什么问题以及如何修改?
我试图在代码之前以list()的形式取消Templet_1h,但随后警告变成.files对列表没有...,就好像从未运行评价_1一样。
答案 0 :(得分:0)
使用exec(evaluate_1, globals())
来代替exec
中全局变量和局部变量的全局字典。
代码将定义的变量添加到全局字典中。不可能将其添加为函数的局部变量。