我有一个问题编程python,我感到很无助:(
下面是我的代码(它被大大简化了,因为我的代码有几百行那么长):
def coax():
#some tkinter stuff...
text = ""
def refresh():
try:
do_something(text)
text = "Hello"
except:
do_something_else(text)
do_something()和do_something_else()是其他函数,在本例中无关紧要。
我现在知道的是,通过语句text = "Hello"它现在是一个局部变量。我不希望它是一个局部变量。我想在coax()中更改文本变量,而不是在refresh()中创建新的本地。
我尝试使用global(我知道这是一个非常不优雅的解决方案,不应该使用)。代码如下所示:
def coax():
#some tkinter stuff...
text = ""
def refresh():
global text
try:
do_something(text)
text = "Hello"
except:
do_something_else(text)
这给了我一个"NameError: name 'text' is not defined"except块中的异常。我做错了什么?我可以在哪里改进代码?
global
不工作,因为两个text
变量都是本地的,但它们只是在不同的"水平";的地方。要使变量引用周围函数中的另一个局部变量,请使用nonlocal
:
def coax():
#some tkinter stuff...
text = ""
def refresh():
nonlocal text
try:
do_something(text)
text = "Hello"
except:
do_something_else(text)