除非ValueError python3(初学者)

时间:2016-01-06 22:07:19

标签: python-3.x exception-handling

我试图通过输入'退出'来退出以下代码块。由于将输入语句格式化为整数,这会导致错误。我能够利用尝试摆脱错误,但是我仍然无法退出'退出'要被识别为输入,因为所有非整数输入都会产生代码块底部的else print语句,包括退出'。

除了ValueError之外,有没有办法对变量进行评估?

import sys
import pdb
from random import choice

random1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
random2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

while True:
    print("To exit this game type: 'exit'")
    num1 = choice(random2)
    num2 = choice(random1)

    try:
        answer = int(input("What is {} times {}? :" .format(num1,\
        num2)))

        if answer == num1 * num2:
            print("Correct Choice!")

        else:
            print("WRONG")

    except ValueError:
        if answer == 'exit':
            print("Now exiting the game")
            sys.exit()
        else:
            print("that answer is not valid try again")

`

2 个答案:

答案 0 :(得分:1)

如果ValueError被调用int(最有可能的地方),则answer将不会为其分配新值。怎么可能呢?在任何分配发生之前,尝试将"exit"(或其他内容)转换为int失败了。要解决此问题,您需要尝试以下方式:

# Get the raw string
answer = input("What is {} times {}? :" .format(num1, num2))
# Convert to int; if it fails, the raw string is left in answer
answer = int(answer)

这样,如果answer提升int,原始字符串仍然在ValueError

答案 1 :(得分:0)

我看到的最快捷方式是分割您的输入行:

raw_answer = input("What is {} times {}? :" .format(num1, num2))
try:
    answer = int(raw_answer)
except ValueError:
    if raw_answer == 'exit':
        print("Now exiting the game")
        sys.exit()
    else:
        print("that answer is not valid try again")

这样您就可以保留输入的原始答案,同时仍然使用ValueError退出程序。

或者,您可以先检查raw_answer == 'exit',然后再使用int() ...