Python 局部变量混乱

Python local variable confusion

我在编码 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() 中创建新的本地变量。

我尝试使用全局(我知道这是一个非常不优雅的解决方案,不应该使用)。代码如下所示:

def coax():
   #some tkinter stuff...
   text = ""
   def refresh():
      global text
      try:
         do_something(text)
         text = "Hello"
      except:
         do_something_else(text)

这在 except 块中给了我一个“NameError: name 'text' is not defined”异常。我究竟做错了什么?我可以在哪里改进代码?

global 不起作用,因为两个 text 变量都是本地的,但它们只是处于本地的不同“级别”。要使变量引用周围函数中的另一个局部变量,请改用 nonlocal

def coax():
   #some tkinter stuff...
   text = ""
   def refresh():
      nonlocal text
      try:
         do_something(text)
         text = "Hello"
      except:
         do_something_else(text)