为什么我不能在 "exec" 字符串中声明一个全局变量
why can't I declare a global variable inside an "exec" string
我正在尝试在 exec 字符串中声明和更改全局变量,如下所示:
ostr = "didn't work"
nstr = "worked"
def function():
exec("global ostr; ostr = nstr")
#global ostr; ostr = nstr
print(ostr)
lv='ostr' in globals()
print(lv)
ostr='asd'
function()
但是,打印语句中出现以下错误:
UnboundLocalError: local variable 'ostr' referenced before assignment
但是,如果我在 exec 语句后注释掉“exec”行并取消注释行,代码就可以正常工作。
如何使用“exec”修复此错误?我想声明全局变量并在 exec 字符串中修改这些全局变量,并在后续行的“函数”中显示这些修改。
您必须声明您在函数中使用全局 ostr 才能打印它。这段代码输出
def function():
global ostr
exec("global ostr; ostr = nstr")
#global ostr; ostr = nstr
print(ostr)
lv='ostr' in globals()
print(lv)
ostr='asd'
worked
True
编辑:刚刚意识到 exec 实际上与全局变量一起工作,如果您重新运行您的代码并在全局 main 中打印(osr),您会看到它已更改。
ostr = "didn't work"
nstr = "worked"
def function():
#global ostr
exec("global ostr; ostr = nstr")
function()
print(ostr)
worked
编辑#2:要么在修改前将 ostr 声明为全局变量,要么将其分配给另一个局部变量。
ostr = "didn't work"
nstr = "worked"
def function():
exec("global ostr; ostr = nstr")
#global ostr; ostr = nstr
print(ostr)
lv='ostr' in globals()
print(lv)
function()
worked
True
我正在尝试在 exec 字符串中声明和更改全局变量,如下所示:
ostr = "didn't work"
nstr = "worked"
def function():
exec("global ostr; ostr = nstr")
#global ostr; ostr = nstr
print(ostr)
lv='ostr' in globals()
print(lv)
ostr='asd'
function()
但是,打印语句中出现以下错误:
UnboundLocalError: local variable 'ostr' referenced before assignment
但是,如果我在 exec 语句后注释掉“exec”行并取消注释行,代码就可以正常工作。
如何使用“exec”修复此错误?我想声明全局变量并在 exec 字符串中修改这些全局变量,并在后续行的“函数”中显示这些修改。
您必须声明您在函数中使用全局 ostr 才能打印它。这段代码输出
def function():
global ostr
exec("global ostr; ostr = nstr")
#global ostr; ostr = nstr
print(ostr)
lv='ostr' in globals()
print(lv)
ostr='asd'
worked
True
编辑:刚刚意识到 exec 实际上与全局变量一起工作,如果您重新运行您的代码并在全局 main 中打印(osr),您会看到它已更改。
ostr = "didn't work"
nstr = "worked"
def function():
#global ostr
exec("global ostr; ostr = nstr")
function()
print(ostr)
worked
编辑#2:要么在修改前将 ostr 声明为全局变量,要么将其分配给另一个局部变量。
ostr = "didn't work"
nstr = "worked"
def function():
exec("global ostr; ostr = nstr")
#global ostr; ostr = nstr
print(ostr)
lv='ostr' in globals()
print(lv)
function()
worked
True