【问题标题】:Python: else ValueError: (Specifically ValueError In This Case)Python:否则ValueError:(在这种情况下特别是ValueError)
【发布时间】:2016-09-27 15:56:25
【问题描述】:

我有一个与我的代码无关的问题。我只是好奇。为什么我(我不了解你)只能将 ValueError 与 try 和 except 循环一起使用?例如:

print("What is 1 + 1?")
while(True):
    try:
        UserInput = int(input(("Your answer here:"))
        if(UserInput == 2):
            print("Congratulations you are correct!")
            break
        else:
            print("That is incorrect. Try again!")
    except ValueError:
        print("That is not a number. Try again!")

这工作得很好(或者至少应该)但是,为什么(如果没有)下一段代码不起作用。

print("What is 1 + 1?")
while(True):
    UserInput = int(input("Your answer here:"))
    if(UserInput == 2):
        print("Congratulations you are correct!")
        break
    elif(UserInput != 2):
        print("That is incorrect. Try again!")
    else(ValueError):
        print("That is not a number. Try again!")

当我运行它时,我得到了这个错误:

Traceback (most recent call last):
  File "python", line 9
    else(ValueError):
        ^
SyntaxError: invalid syntax

我知道这是因为 ValueError 仅适用于(我认为)try 和 except 循环,但是,为什么它不能在上述情况下不起作用?我认为他们会给出相同的结果,但是,我不知道一切。也许你们中的一个非常聪明的人可以告诉我我的那行不通或替代方案。感谢您试图向我澄清这一点:)。

【问题讨论】:

    标签: python python-3.x if-statement while-loop try-except


    【解决方案1】:

    第二个例子中的 SyntaxError 来自于 else 不需要条件这一事实。第一个例子完全没问题。

    更好的是,让 try-block 尽可能短:

    print("What is 1 + 1?")
    while True:
        try:
            UserInput = int(input(("Your answer here:"))
        except ValueError:
            print("That is not a number. Try again!")
        else:
            if UserInput == 2:
                print("Congratulations you are correct!")
                break
            else:
                print("That is incorrect. Try again!")
    

    【讨论】:

    • 我认为,last else 是多余的。
    • 所以不能有 ValueError 。您认为第二种方式会更容易吗?
    • @Jacobian:不,不是
    • @BradTheBrutalitist:您无法使用else-clause 捕获异常。
    • @RushyPanchal 好的。感谢您帮助证明这一点。对此,我真的非常感激! :)
    【解决方案2】:

    tryexcept 是控制流的一种形式。本质上就是try运行这段代码,except如果发生异常(比如ValueError)做别的事情。

    ifelse 是另一种形式的控制流。一起,他们的意思是if 一个条件为真,做点什么; else,做点别的吧。

    发生的异常不是条件,因此将elseValueError 之类的异常一起使用是没有意义的。相反,您想使用 try/except 块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 2011-09-14
      相关资源
      最近更新 更多