Python 局部变量';菜单操作';分配前参考

Python 局部变量';菜单操作';分配前参考,python,Python,无论我如何试图修复它,我总是会遇到这个错误。我已经在我制作的另一个脚本中使用了这个方法,它工作得很好,但由于某种原因,它不能与这个脚本一起工作。我们的想法是返回到第一个菜单,选择2号。请注意,我确实查看了其他相关帖子,但它们根本帮不了我 import os import sys def menu(): print """ this is a test menu """ menu() def back(): menu_actions['menu']() men

无论我如何试图修复它,我总是会遇到这个错误。我已经在我制作的另一个脚本中使用了这个方法,它工作得很好,但由于某种原因,它不能与这个脚本一起工作。我们的想法是返回到第一个菜单,选择2号。请注意,我确实查看了其他相关帖子,但它们根本帮不了我

import os
import sys

def menu():
    print  """

this is a test menu

"""
menu()

def back(): 
    menu_actions['menu']()

    menu_actions = {
         'menu': menu,
         '2': back,
         }

choice = raw_input(">>")
if choice == '2':
    back()
试试这个:

#!/usr/bin/env python

def menu():
    print  """

this is a test menu

"""

def back(): 
    menu_actions['menu']()

if __name__ == '__main__':

    menu_actions = {
       'menu': menu,
       '2': back,
    }

    menu()

    while True:
        choice = raw_input(">>")
        if choice == '2':
            back()
正如@John Anderson和我在评论中所解释的,菜单动作字典在定义之前就被引用了,这就是为什么你会遇到这个错误

一旦将其移出
back
功能的范围,它将正常工作。虽然如果您希望程序在返回主菜单后继续运行,那么整个程序需要在无限循环中运行,并且只有在需要时才会终止。当程序变得更复杂时,您也可以在其他时间向错误添加额外的错误处理


希望这有助于解决您的问题。

在方法
back()
中使用
后,您的
菜单\u操作将显示分配。可能
菜单\u actions=
不应位于
back()
方法内,即不应缩进。请尝试将
菜单\u actions
字典移到
back
函数范围之外(即,在定义
选项之前的
back
函数下方。该函数起作用,但不允许我再次选择选项。它会循环然后退出脚本。哦,我没有意识到这是您试图完成的。在这种情况下,您可能需要一个while循环,以便程序继续循环,直到您完成为止
control-c
或故意退出。这听起来像是你想要完成的事情的准确答案吗?是的。我会试试看