我必须使用try:和ValueError除外吗?

时间:2016-10-18 16:13:14

标签: python

我还是python的新手。 我是否必须使用try:和ValueError? 如果不是,我何时应该使用它们? 有些部件可以使用和不使用它 E.g

Def Main_Menu():
    Main_menu_op = input("A.Start \nB.Options \nC.Exit")
    Try:
        if Main_menu_op == "A" or "a":
            Start()

        elif Maim_menu_op == "B" or "b":
            Options()

        elif Main_menu_op == "C" or "c":
            Exit()
    except ValueError:
       print("error")
       Main_menu()

我输入了这个,因为我在平板电脑而不是我的电脑上,所以只是忽略任何错误

P.s这是我正在研究的基于文本的游戏的一部分

2 个答案:

答案 0 :(得分:2)

try except块用于包含可能产生运行时错误的代码。错误类型的可选参数(在这种情况下,您有输入ValueError)将更改块,以便它只捕获该类型的异常。在您的示例中,如果没有正确选择任何给定选项,您似乎正在尝试生成错误消息。

如上所述,如果收到不同的输入,则不会传递任何if语句,但不会生成异常。而不是尝试:除了,您可能只需在else语句中使用额外的if块。真正的异常通常保留用于在尝试执行非法操作时退出代码,例如除以0.如果您想要create your own自定义异常来模仿非法行为,则必须测试何时应该引发非法行为(可能使用if语句)然后使用您的自定义异常调用raise

我还想指出,在ifelif条件下,我认为您误解了==or的运算符优先级。等价运算符:==将首先调用,因为运算符优先级产生一个真值或假值,然后或将被计算。将true或false值与非空字符串('a''b''c')进行比较,该字符串将始终评估为true。相反,您可以添加另一个==比较,例如:if Main_menu_op == "A" or Main_menu_op == "a":

答案 1 :(得分:0)

当您知道可以安全地处理特定的已知错误时,您应该只使用tryexcept ...Errordocumentation)。

因此,如果您期望某个错误,例如ValueError,您可以捕获它并处理它而不是让您的应用程序崩溃。假设您有一个用户的输入并期望一个数字:

...
a = raw_input('Please give me a number: ') # input(...) on Python 3.
try:
    number = float(a)
except ValueError:
    print 'You have not given me a valid number, defaulting to 0.'
    number = 0.
# do stuff with number
...

如果您没有预料到错误或者没有准备好处理它(或者没有正确的处理方法),您可能希望在控制台上看到错误及其跟踪,以便您可以对其进行调试。

在您的示例中,您可以使用“else”来表示无法识别给定的命令,并请求另一个。