【问题标题】:Will if else work after except ValueError python3 (beginner)除了 ValueError python3 (初学者)之外,如果其他方法可以工作吗
【发布时间】:2016-01-06 22:07:19
【问题描述】:

我正在尝试通过键入“exit”来退出下面的代码块。由于将输入语句格式化为整数,这导致了错误。我能够使用 try 和 except 摆脱错误,但是我仍然无法将“退出”识别为输入,因为所有非整数输入都会导致代码块底部的 else 打印语句,包括“出口'。

除了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")

`

【问题讨论】:

    标签: python-3.x exception-handling


    【解决方案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)
    

    这样,如果int 引发ValueError,则原始字符串仍在answer 中。

    【讨论】:

      【解决方案2】:

      我认为最快的方法是拆分您的输入行:

      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()...

      【讨论】:

      • 这项技术正是我试图弄清楚的,并且效果很好。谢谢!
      猜你喜欢
      • 2018-03-01
      • 1970-01-01
      • 2019-09-14
      • 2017-07-18
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 2014-04-14
      • 2020-06-18
      相关资源
      最近更新 更多