Exec не может получить доступ к переменным в родительской среде - PullRequest
0 голосов
/ 30 сентября 2019

Мой друг попросил меня создать функцию, которая может выполнять код в цикле for, поэтому я делал это, и я использовал exec в том же файле, я объявил переменную name, теперь, когда я получаю доступ к nameиз exec он говорит: NameError: name 'name' is not defined

Эта вещь находится в нескольких файлах, одна запускает все, вторая включает все функции и одна вызывает все функции

Я пытался определить переменные внутриExec и конечно, это работает. Я попытался получить доступ к переменным в файле functions.py (файл, содержащий каждую функцию), и он тоже работает.

Я попытался объединить functions.py и test.py (файл, использующий exec) и затем запустить егонапрямую через python, и это сработало

Мой functions.py файл

def forloop(current, maximum, code):
    for x in range(current, maximum):
        exec(str(code), globals())

Мой 'test.py' (это тот, где я вызываю функции)

from functions import *
name = 'Ameer'
forloop(1,3,"""
echo(name)
""")

И я запускаю все это через другого exec в моем 'runner.py'

from functions import *
file = open('test.py', "r+")
content = file.read()
exec(content)

Теперь, это дает мне сообщение об ошибке NameError: name 'name' is not defined, когда оно определено. Пожалуйста, вы, ребята, можете помочь мне с этим вопросом

1 Ответ

0 голосов
/ 30 сентября 2019

Вам нужно использовать переменные из того места, где вызывается forloop.

import inspect


def forloop(current, maximum, code):
    frame = inspect.currentframe().f_back
    for x in range(current, maximum):
        exec(str(code), frame.f_globals, frame.f_locals)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...