第一次出错后函数返回NoneType

时间:2019-02-05 14:32:26

标签: python python-3.x function recursion nonetype

我有一个要求提供某些特定数据的函数。我还有另一个接受输入的函数,如果它应该是输入的话,它将分配给被调用的变量。

问题是,如果我得到了错误的值,那么即使我第二次得到正确的答案,它也将始终返回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 :(得分:1)

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

您必须从递归调用中返回值。您不会像通常那样扔掉一个函数的结果,并且递归并不是很特别,它只是另一个函数调用。