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