Единственное возможное объяснение этого поведения заключается в том, что у вас есть файл с именем read_file
, который добавляется к templet_1h
.
Когда вы перебираете templet_1h.files
, в какой-то момент происходит следующееsaid:
evaluate_2= i+"="+"templet_1h[\"" + i + "\"]";
# this results in: read_file = templet_1h["read_file"]
Когда это выполнено, он связывает read_file
с пустым массивом в глобальном пространстве имен вместо вашей функции.
Хотя есть способы исправить этопроблема, проблема real заключается в том, что вы не должны использовать exec
таким образом.Выполнять произвольный код Python опасно, и этот конкретный фрагмент очень прост для злоупотребления .Например, если пользователь решает создать имя файла 'np.argmax'
, вы теряете возможность вызывать функцию argmax
, список можно продолжать и продолжать.
Вы действительно должны использовать что-то вроде словаря для храненияпеременное число переменных, а не полагаться на опасное поведение.