имя exec "templet_1h" не определено - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь написать код с использованием функций 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)

Что не так с предупреждением и как его изменить?

Я пытался объявить templet_1h перед кодом в виде list (), но затем предупреждение стало .files не было ..к спискам, как если бы метод оценки_1 никогда не выполнялся.

1 Ответ

0 голосов
/ 16 декабря 2018

Вместо этого используйте exec(evaluate_1, globals()), чтобы использовать глобальный словарь для глобальных и локальных переменных в exec.

Код добавляет определенную переменную в глобальный словарь.Добавление его в качестве локальной переменной функции невозможно.

...