猿问

异常处理 - Python

当用户没有输入正确的字符时,我试图得到消息“无效值”,但程序重新启动而不打印消息。你可以帮我吗?


# Print "Male" when the user types "M" and "Female" when the user types "F"


def m_ou_f():

    mens_erro = "INVALID VALUE"

    while True:

        try:

            sex = str(input("Type M for Male or F for Female: "))

            sex == "M" or sex == "F" or sex == "f" or sex == "m"

        except:

            print(mens_erro)

            continue

        else:

            return sex

            break


while True:

    sex = m_ou_f()

    try:

        sex == "M" or sex == "F" or sex == "f" or sex == "m"

    except:

        print("INVALID VALUE!")

        continue

    else:

        if sex == 'M' or sex == 'm':

            print("Male")

            break

        elif sex == 'F' or sex == 'f':

            print("Female")

            break


炎炎设计
浏览 124回答 2
2回答

神不在的星期二

sex == "M" or sex == "F" or sex == "f" or sex == "m"此行不会引发异常 - 如果键入了错误的字符,它只会计算为“false”。也许你想要这样的东西:if sex == "M" or sex == "F" or sex == "f" or sex == "m" : raise Exception(mens_erro) 至于第二部分 - 你的函数不会返回异常,所以没有必要把它放在一个try catch中:while True:    sex = m_ou_f()    if sex == 'M' or sex == 'm':        print("Male")        break    elif sex == 'F' or sex == 'f':        print("Female")        break但如果你这样做了:try:  sex = m_ou_f();except:  continue

红颜莎娜

没有必要把同样的东西写两遍。try 语句的工作原理如下。[来自 Python Docs]首先,执行 try 子句(try 和 except 关键字之间的语句)。如果未发生异常,则跳过 except 子句并完成 try 语句的执行。如果在执行 try 子句期间发生异常,则将跳过该子句的其余部分。然后,如果其类型与以 except 关键字命名的异常匹配,则执行 except 子句,然后在 try 语句之后继续执行。如果发生与 except 子句中指定的异常不匹配的异常,则会将其传递给外部 try 语句;如果未找到处理程序,则为未处理的异常,并且执行将停止并显示一条消息,如上所示。在你的情况下,尝试块已成功执行,这就是为什么它不会进入块之外。这将打印 .INVALID VALUE!while True:    try:      sex = str(input("Type M for Male or F for Female: "))    except ValueError:      print("INVALID VALUE!")    if sex == 'M' or sex == 'm':        print("Male")        break    elif sex == 'F' or sex == 'f':        print("Female")        break    else:      print("INVALID VALUE!")如果我必须添加更多解释,请告诉我。
随时随地看视频慕课网APP

相关分类

Python
我要回答