Функция возвращает NoneType после того, как ошиблась с первого раза - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть функция, которая запрашивает некоторые конкретные данные.У меня есть другая функция, которая принимает входные данные, и если это то, что должно быть, она присваивает переменной, из которой она была вызвана.

Проблема в том, что если я получу неправильное значение, то он всегда вернет NoneType объект, даже если я получу хороший ответ во второй раз.

Я попытался удалить clear().Я пытался добавить больше возврата, даже там, где ответ не должен проходить.Я попытался добавить второй аргумент в функцию с именем переменной, которую я пытаюсь присвоить значению

def ask_input_string(text):

    ''' Takes only one argument. This function asks for input when it is called and returns the value but with the argument provided as text. '''

    variable=input(text)
    if variable=="":
        print("\nField must not be empty")  
        ask_input_string(text)
    try:
        int(variable)
        print("\nPlease enter a name!")
        ask_input_string(text)

    except ValueError:
        return variable

def menu_add():
    clear()

    print("\nPlease add the data required!\n")

    nume=ask_input_string("Name of animal: ")

    animal_type=ask_input_string("\nAnimal Type: ")

Ожидаемый результат:

Если я добавлю неправильное значение, он запрашиваетправильный.Я даю правильный, и он присваивает переменной, из которой он был вызван.

Фактический результат:

Если я даю неправильный ответ хотя бы 1 раз, то даже если я получу правильныйВо-первых, он всегда будет присваивать NoneType переменной, из которой он был вызван.

Если я даю правильный ответ в первый раз, это работает.Это не работает, если я даю неправильный ответ.

1 Ответ

0 голосов
/ 05 февраля 2019
def ask_input_string(text):
    variable = input(text)
    if variable == "":
        print("\nField must not be empty")
        return ask_input_string(text)

    try:
        int(variable)
        print("\nPlease enter a name!")
        return ask_input_string(text)
    except ValueError:
        return variable

Вы должны вернуть значения из рекурсивного вызова.Вы бы не выбросили результат такой функции, как обычно, и рекурсия на самом деле не особенная, это просто вызов другой функции.

...