字母的菜单输入返回错误

时间:2015-03-01 17:01:16

标签: python

在我玩的python游戏中,我有一个菜单,你可以选择玩游戏,加载已保存的游戏,保存游戏,然后退出。数字输入工作正常,但是当您不小心或故意输入字母或符号时,它会返回错误:

Choice = eval(input())
File "string", line 1, in module
NameError: name 'y' is not defined"

我该如何解决此问题?

发生错误的函数:

def DisplayMenu():
    print('1.  Start new game')
    print('2.  Load game')
    print('3.  Save game')
    print('9.  Quit')
    print('Please enter your choice: ')

def GetMainMenuChoice():
    Choice = eval(input())
    return Choice

if not (Choice in ['1','2','3','4','9']):
    print("\n Invalid choice. Enter your option again. \n")
    Choice = False
else:
    Choice = True 

1 个答案:

答案 0 :(得分:0)

如果您使用的是python2,则需要raw_input,而使用eval,如果需要int等,则只需转换为int ...除非您有变量y在您尝试eval字符串y的某个地方定义时,您将看到错误,无论是否使用eval都应该很少。您的列表中包含字符串的事实会导致尝试使Choiceint不合逻辑。

choice = raw_input() #  input python3

if choice not in {'1','2','3','4','9'}
   ....

对变量/函数名称使用小写。

您可能还会发现while循环是一种更好的方法:

def get_main_menu_choice():
    while True:
        choice = raw_input("Please choose an option")
        if choice not in {'1','2','3','4','9'}:
            print("Invalid choice. Enter your option again.")
        else:
            return choice

what-does-pythons-eval-do