为什么我的python循环不断地碰到我的exception子句?
这个代码对吗?出于某种原因,如果输入了无效的输入,代码将继续循环except子句。知道为什么吗?您需要获取代码以再次请求输入。。。试试这个:为什么我的python循环不断地碰到我的exception子句?,python,Python,这个代码对吗?出于某种原因,如果输入了无效的输入,代码将继续循环except子句。知道为什么吗?您需要获取代码以再次请求输入。。。试试这个: classname = "" classpick = input("Enter class name (\"A,B,C\") ") while classname == "": try: if classpick.upper() == "A": classname = "classA.txt"
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.")
编辑:
最后一个elif的作用是什么贾斯珀
没什么!谢谢你的帮助 您还有一个多余的elif/else语句
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\") ")
更清洁的解决方案可能是:
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.")
请在输入错误的情况下再试一次,除非它将中断,否则您可以创建函数并返回,除非。没问题@DanielRhodes。但是,在问像这样的简单问题之前,您可能想先查阅python文档,或者查看其他stackoverflow帖子。@RedIcon ermmm。。。不,没有。。。D3107我会记住这一点——这是我的第一篇帖子;对不起@贾斯珀很好。。。这似乎是多余的,但我把它留了下来,以防万一它有什么用途。代码在没有it@RedIcon你犯了什么样的错误?对我来说很好。你也可以删除while循环:)可以吗?我想那会让你只有一次机会进入name@D3107解决方案在连续两次输入错误后不会中断,但我很欣赏这种更有效的替代方案啊,对不起,我看到了now@OwenHempel很好的效率,但为什么我的解决方案在为您提供了两个糟糕的输入后崩溃了?我没有遇到相同的问题。您也可以签出,这样您就不必首先将
classname
初始化为空字符串。
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.")