【问题标题】:Function returns NoneType after getting it wrong the first time函数第一次出错后返回 NoneType
【发布时间】:2019-02-05 14:32:25
【问题描述】:

我有一个要求一些特定数据的函数。我有另一个接受输入的函数,如果它应该是它应该是什么,它会分配给它被调用的变量。

问题是如果我得到一个错误的值,那么它总是会返回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 分配给调用它的变量。

如果我第一次给出正确答案,它会起作用。如果我首先给出错误的答案,它将不起作用。

【问题讨论】:

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


    【解决方案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
    

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

    【讨论】:

    • 输入应该只是字符串,而不是整数。所以基本上这是一个名字,我不能是一个空字段或一些数字
    • @Seeven 抱歉,我已经习惯了人们想将输入转换为整数,但我没有给予足够的关注。
    • 它尝试转换为整数。如果失败(因为它是一个字符串),则返回该值。问题是,如果我第一次输入一个整数,第二次输入一个字符串,它将返回一个 noneType,但如果我首先给出一个字符串,它返回一个字符串。
    • @Seeven 我明白这一点,所以我恢复了异常处理部分。只需输入回报,您就可以开始了。但是您的术语有点偏离 - variable 始终是一个字符串,它可能只是一个恰好可以解释为数字的字符串。
    • 嗯......它的工作原理......但我真的不明白为什么......顺便谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2016-04-02
    • 2020-07-17
    • 2012-02-02
    • 2018-05-17
    相关资源
    最近更新 更多