首页 > 解决方案 > 执行名称“templet_1h”未定义

问题描述

我正在尝试使用 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 has no ... 对列表,好像评估_1 从未运行过。

标签: pythonnumpyexeceval

解决方案


改为使用exec(evaluate_1, globals())全局字典来存储exec.

该代码将定义的变量添加到全局字典中。无法将其添加为函数的局部变量。


推荐阅读