Я думаю, что то, что вы делаете, похоже на это, что приводит к ошибке, которую вы видите:
def x():
global test1
def y():
test1 = 123
y()
x()
print(test1)
>>> NameError: name 'test1' is not defined
Если вы опустите объявление глобальной переменной вниз в область, где назначена переменная,тогда переменная становится глобальной:
def x():
def y():
global test2
test2 = 123
y()
x()
print(test2)
>>> 123
Итак, чтобы добавить exec
обратно в микс, попробуйте следующее:
def a():
script = """a = 1\nif a == 1:\n print("a")"""
exec("""global events\nevents = compile(script, "events", "exec")""")
exec(events)
a()
exec(events)
>>> a
>>> a