如何在我的while循环中添加ValueError异常?

时间:2019-02-18 21:42:38

标签: python exception while-loop

我目前刚开始学习Python,必须完成一项作业,这需要我们创建一个程序,该程序允许用户执行多项操作,其中之一是可以在列表中输入任意数量的数字,然后对气泡进行排序。我们不允许在内置的排序函数或类似的函数中使用。我想向代码/特别是将输入数字追加到列表的函数添加一个例外,这样,如果用户输入除整数以外的任何字符,我的程序不会中断,而是弹出我自己的错误消息。我通常知道如何使用while循环和try/exception来完成此操作,但是由于不确定性的出现,我不确定在哪里以及如何将其添加到我的代码中。

我尝试在整个函数的不同位置添加带有try/exception的while循环,但是发生两种情况之一:我的列表没有更新。当用户输入数字时,程序应打印用户输入的数字,并允许他们继续输入数字,直到键入“ sort”为止。但是,当我输入数字时添加try/exception时,什么也没有发生,或者程序将显示“无需交换”,并且不再要求提供任何数字。发生的另一件事是我得到以下错误:TypeError: object of type 'NoneType' has no len()指的是我不知道的BubbleSort()函数,它使我头疼。这是将输入数字追加到列表的功能:

def AppendList():
    numberList = []
    while True:
        newNumbers = input("Please enter a number to add to the list. To begin "
                           "sorting your list, type 'sort'.\n ")
        if newNumbers == "sort":
            break
        numberList.append(int(newNumbers))
        print("This is how the list currently looks: " + str(numberList) +  ",")
    return numberList

TLDR;我希望我的程序允许用户在列表中输入数字。每次用户输入数字时,我的程序都应该说“这是列表当前的样子……”,直到他们在控制台中键入“ sort”为止。如果用户输入的字符不是数字,我希望弹出自己的错误而不是程序中断。

这是整个程序本身的文本文件https://pastebin.com/wkwmK49Q

3 个答案:

答案 0 :(得分:0)

将try-except环绕在将其转换为整数的点上:

def AppendList():
    numberList = []
    while True:
        newNumbers = input("Please enter a number to add to the list. To begin sorting your list, type 'sort'.\n ")
        if newNumbers == "sort":
            break
        try:
            numberList.append(int(newNumbers))
        except ValueError:
            print("Your error message")
        print("This is how the list currently looks: " + str(numberList) +  ",")
    return numberList

答案 1 :(得分:0)

您可以将希望捕获错误的代码部分包装在以下位置:

try:
    input(...)
    [...]
except ValueError as e:
    print(e)

或者您可以在转换之前验证字符串:

if not newNumbers.isdecimal():
    print('Not a valid number: ' + s)

答案 2 :(得分:0)

您可以使用Try-Except块引发ValueError,在这种情况下,程序将退出并显示错误消息,但您可以将ValueError('')更改为简单的print函数。

def AppendList():
    numberList = []
    while True:
        try:
            newNumbers = input("Please enter a number to add to the list. To begin sorting your list, type 'sort'.\n ")
            if newNumbers == "sort":
                break
            numberList.append(int(newNumbers))
        except ValueError: #Value error
            raise ValueError("ValueError")
        except: #Any other error
            print("any other error")
        print("This is how the list currently looks: " + str(numberList) +  ",")
    return numberList

还可以添加一个检查输入的函数,因此不需要ValueError

newNumbers = str(input("Please enter a number to add to the list. To begin sorting your list, type 'sort'.\n "))
if(newNumber.isdigit() or newNumber == 'sort'): #Number or sort
    #ETC.