Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的python循环不断地碰到我的exception子句?_Python - Fatal编程技术网

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

为什么我的python循环不断地碰到我的exception子句?,python,Python,这个代码对吗?出于某种原因,如果输入了无效的输入,代码将继续循环except子句。知道为什么吗?您需要获取代码以再次请求输入。。。试试这个: classname = "" classpick = input("Enter class name (\"A,B,C\") ") while classname == "": try: if classpick.upper() == "A": classname = "classA.txt"

这个代码对吗?出于某种原因,如果输入了无效的输入,代码将继续循环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
        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.")