为什么我的python循环不断地碰到我的exception子句?

2024-04-23 09:50:02 发布

您现在位置:Python中文网/ 问答频道 /正文

classname = ""
classpick = input("Enter class name (\"A,B,C\") ")
while classname == "":
    try:
        if classpick.upper() == "A":
            classname = "classA.txt"
        elif classpick.upper() == "B":
            classname = "classB.txt"
        elif classpick.upper() == "C":
            classname = "classC.txt"
        elif classpick.upper() not in ["A","B","C"]:
            raise ValueError
        else:
            raise ValueError
    except ValueError:
        print("Invalid value. Please enter a letter A,B or C.")

这个代码对吗?出于某种原因,如果输入了无效的输入,代码就会继续循环except子句。知道为什么吗?你知道吗


Tags: 代码nametxtinputupperclassraiseenter
2条回答

你需要得到代码来再次请求输入。。。试试这个:

classname = ""
classpick = input("Enter class name (\"A,B,C\") ")
while classname == "":
    try:
        if classpick.upper() == "A":
            classname = "classA.txt"
        elif classpick.upper() == "B":
            classname = "classB.txt"
        elif classpick.upper() == "C":
            classname = "classC.txt"
        elif classpick.upper() not in ["A","B","C"]:
            raise ValueError
    except ValueError:
        print("Invalid value. Please enter a letter A,B or C.")
        classpick = input("Enter class name (\"A,B,C\") ")

编辑:

What is the last elif good for? – Jasper

什么都没有!谢谢你的帮助!你知道吗

你还有一个多余的elif/else语句。你知道吗

classname = ""
while classname == "":
    classpick = input("Enter class name (\"A,B,C\") ")
    try:
        if classpick.upper() == "A":
            classname = "classA.txt"
        elif classpick.upper() == "B":
            classname = "classB.txt"
        elif classpick.upper() == "C":
            classname = "classC.txt"
        #elif classpick.upper() not in ["A","B","C"]:
            #raise ValueError  This and the else below it are redundant.
        else:
            raise ValueError
    except ValueError:
        print("Invalid value. Please enter a letter A,B or C.")

更清洁的解决方案可能是:

classname = ""

while classname == "":
    classpick = input("Enter class name (\"A,B,C\") ")
    try:
        if classpick.upper() in ["A","B","C"]:
            classname = "class"+classpick.upper()+".txt"
        else:
            raise ValueError
    except ValueError:
        print("Invalid value. Please enter a letter A,B or C.")

相关问题 更多 >