Как добавить исключение ValueError в мой цикл while? - PullRequest
0 голосов
/ 19 февраля 2019

В настоящее время я довольно новичок в изучении Python, и мне нужно выполнить задание, которое требует от нас создания программы, которая позволяет пользователю делать несколько вещей, одна из которых заключается в том, что они могут вводить любое количество чисел в список, которыйзатем сортируется по пузырькам.Нам не разрешено использовать встроенные функции сортировки или что-то подобное.Я хочу добавить исключение в мой код / ​​в частности в мою функцию, которая добавляет введенные числа в список, так что если пользователь вводит любой символ, кроме целого числа, моя программа не прерывается, а вместо этого выскакивает мое собственное сообщение об ошибке.Я обычно знаю, как сделать это с помощью цикла while и try/exception, однако я не уверен, где и как добавить это в мой код, поскольку проблемы возникают в любом случае.

Я пытался добавитьЦикл while с try/exception в разных местах функции, однако происходит одно из двух: мой список просто не обновляется.Когда пользователь вводит числа, программа должна печатать, какие числа введены пользователем, и разрешать им продолжать вводить числа, пока они не наберу «сортировать», однако, когда я добавляю 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 голосов
/ 19 февраля 2019

Вы можете обернуть часть кода, в которую вы хотите иметь возможность отлавливать ошибки:

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

Или вы можете проверить строку перед ее преобразованием:

if not newNumbers.isdecimal():
    print('Not a valid number: ' + s)
0 голосов
/ 19 февраля 2019

Вы можете вызвать ValueError с помощью блока Try-Except, в этом случае программа завершит работу с сообщением об ошибке, но вы можете изменить 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.
0 голосов
/ 19 февраля 2019

Оберните попытку, за исключением того момента, когда вы преобразуете его в целое число:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...