异常被提升后不被赋予变量

时间:2014-06-09 16:08:22

标签: python python-2.7

我正在编写一个Python程序,用于在我的计算机上为不同的编程语言创建项目。这开始于选择这个特定项目的语言,我试图以一种处理错误的方式做到这一点。

到目前为止,我有这段代码。

def prompt_user():
    print "Enter the number of the project you would like to create.\n"

    aOptions = ["1. Java", "2. C/C++", "3. Python", "4. Web"]
    for sOption in aOptions:
        print sOption

    try:    
        iOptionChosen = int(raw_input("> "))
        if not(1 <= iOptionChosen <= 4):
            raise ValueError
        else:
            return iOptionChosen
    except ValueError:
        print "\nInvalid value entered. Try again."
        prompt_user()

print prompt_user()

它适用于我需要它做的事情,除了引发异常并且用户被重新提供之后,它永远不会将新变量重新分配给iOptionChosen。为什么这是一个简单的解决方案?真是令人沮丧。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:5)

except案例中:

except ValueError:
    print "\nInvalid value entered. Try again."
    prompt_user()

你只能以递归方式调用 prompt_user。相反,您需要返回它给出的值

except ValueError:
    print "\nInvalid value entered. Try again."
    return prompt_user()

答案 1 :(得分:1)

您可以考虑在逻辑中添加while;通过这种方式,您只需保持在while循环中,直到输入有效。

user_deciding = True
while user_deciding:
    try:
        choice = int(raw_input("> "))
        if choice in list_of_choices:
            user_deciding = False
        else:
            raise ValueError
    except ValueError:
        print "Please make a valid choice."

handle_choice_made(choice)

或者,您可以使用if 5 > choice > 0语法,但是使用一个简单地借用现有列表或字典而不是检查表示有效数据输入的魔术范围的数据结构可能是值得的。