Python局部变量混淆



我有一个问题编程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)

最新更新