Python:否则值错误:(在本例中具体为ValueError)

p8h8hvxi  于 2023-02-18  发布在  Python
关注(0)|答案(3)|浏览(137)

我有一个和我的代码无关的问题,我只是好奇,为什么我(我不知道你)只能在try和except循环中使用ValueError?例如:

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循环,但是,为什么它不能在上面的场景中工作呢?我假设他们会给予相同的结果,但是,我不知道所有的事情。也许你们中的一个聪明人可以告诉我我的不工作或者替代方案。谢谢你试图向我澄清这一点:)。

svujldwt

svujldwt1#

第二个例子中的语法错误来自else不需要条件的事实,第一个例子完全可以。
更好的是,尽量缩短try块:

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!")
jtw3ybtb

jtw3ybtb2#

tryexcept是控制流的一种形式,本质上就是try来运行这段代码,except如果出现异常(比如ValueError)做别的事情。
ifelse是控制流的另一种形式,合在一起表示if条件为真,执行操作;else,做点别的。
发生的异常不是条件,因此将else用于ValueError这样的异常是没有意义的,而应该使用try/except块。

6pp0gazn

6pp0gazn3#

对于else,不需要也不允许任何条件,而且,您需要使用raise来实现您想要的功能

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:
        raise ValueError("That is not a number. Try again!")

相关问题