当我使用 exec 时全局变量不起作用

global variable doesn't work when I use exec

每当我使用以下代码片段执行我的代码时,它都运行良好。

def set_globvar_to_one():
    global globvarq
    globvarq = 2

def print_globvar():
    print(globvarq)

set_globvar_to_one()
print_globvar()

但是,就我而言,我需要使用 exec 命令执行此代码段,因为我的代码是动态的。 所以,我试着关注。

def set_globvar_to_one():
    exec(compile("global globvarq","setglobal","exec"))
    exec(compile("globvarq = 2","setglobal","exec"))
def print_globvar():
    eval(compile("print(globvarq)","setglobal","eval")) 

set_globvar_to_one()
print_globvar()

并且此代码抛出以下错误。

Traceback (most recent call last):
    print_globvar()
    eval(compile("print(globvarq)","setglobal","eval"))
  File "setglobal", line 1, in <module>
NameError: name 'globvarq' is not defined

如何从一种方法中使变量成为全局变量并在另一种方法中使用相同的变量?

我不确定您实际上想要实现什么,但这符合您的预期:

def set_globvar_to_one():
    exec(compile("global globvarq\nglobvarq = 2", "setglobal", "exec"))


def print_globvar():
    eval(compile("print(globvarq)", "setglobal", "eval"))


set_globvar_to_one()
print_globvar()