为什么我的 python 循环不断命中我的异常子句

  • 本文关键字:子句 异常 循环 python 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 子句。知道为什么吗?

您需要获取代码以再次请求输入...试试这个:

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

编辑:

最后一个精灵有什么用?

无!感谢您的帮助!

你还有一个多余的 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.")

最新更新