执行名称“ templet_1h”未定义

时间:2018-12-16 02:01:50

标签: python numpy exec eval

我正在尝试使用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一样。

1 个答案:

答案 0 :(得分:0)

使用exec(evaluate_1, globals())来代替exec中全局变量和局部变量的全局字典。

代码将定义的变量添加到全局字典中。不可能将其添加为函数的局部变量。