为了账号安全,请及时绑定邮箱和手机立即绑定

异常处理 - Python

异常处理 - Python

炎炎设计 2022-08-25 09:25:49
当用户没有输入正确的字符时,我试图得到消息“无效值”,但程序重新启动而不打印消息。你可以帮我吗?# 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            breakwhile 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
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

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


查看完整回答
反对 回复 2022-08-25
?
红颜莎娜

TA贡献1842条经验 获得超13个赞

没有必要把同样的东西写两遍。

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

如果我必须添加更多解释,请告诉我。


查看完整回答
反对 回复 2022-08-25
  • 2 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号