Python TypeError:int()参数必须是字符串、类似于对象的字节或数字,而不是“NoneType”

Python TypeError:int()参数必须是字符串、类似于对象的字节或数字,而不是“NoneType”,python,validation,typeerror,Python,Validation,Typeerror,我是一名学生,对python非常陌生。我试图验证用户输入,以检查他们是否输入了3位数字,他们应该只能输入2位数字。当用户只输入2位数字时,程序工作正常,但当用户输入3位或更多数字时,程序会抛出我创建的错误消息,并要求他们重新输入一个只有2位数字的数字,然后一旦他们重新输入一个2位数字,python就会给我一个TypeError。我得到的全部错误是: Traceback (most recent call last): File "/Users/admin/Desktop/week6/ques

我是一名学生,对python非常陌生。我试图验证用户输入,以检查他们是否输入了3位数字,他们应该只能输入2位数字。当用户只输入2位数字时,程序工作正常,但当用户输入3位或更多数字时,程序会抛出我创建的错误消息,并要求他们重新输入一个只有2位数字的数字,然后一旦他们重新输入一个2位数字,python就会给我一个TypeError。我得到的全部错误是:

Traceback (most recent call last):
  File "/Users/admin/Desktop/week6/question_7.py", line 87, in <module>

  File "/Users/admin/Desktop/week6/question_7.py", line 79, in do_stuff
    print (display_grade(user_in))
TypeError: int() argument must be a string, a bytes-like object or a 
number, not 'NoneType'
我很难弄清楚它为什么这样做。我有一种感觉,它与在其内部调用get_输入函数有关?但我不知道如何避免这种情况

我搜索了我不断得到的错误,没有找到任何有用的东西

这是程序,非常简单

 NUMBER_OF_TESTS = 5

def get_input ():
    print ('enter a test score below')
    user_in = input()
    if len(user_in) > 2:
        print ('error, you can only enter a 2 digit number.')
        get_input()
    else:
        return user_in

def display_grade (letter_grade):
    if letter_grade >= 89:
        return ('You got an A!')
    elif letter_grade >= 80 and letter_grade <= 89:
        return ('You got a B!')
    elif letter_grade >= 70 and letter_grade <= 79:
        return ('You got a C')
    elif letter_grade >= 61 and letter_grade <= 69:
        return ('You got a D')
    else:
        return ('You got an F')

def calAverage(total):
    average_score = (total) / NUMBER_OF_TESTS
    return int(average_score)

def do_stuff():
    i = 0

    x = 0

    while i < NUMBER_OF_TESTS:
        user_in = int(get_input())
        print (display_grade(user_in))
        x = x + user_in
        i = i + 1
    print ('your average score is' , calAverage(x) , 'which means' , display_grade(calAverage(x)))



do_stuff()

问题在于递归get_输入调用。当您进行该调用时,您没有返回得到的值,因此不会返回任何值。将其替换为返回get_输入。而且,你的函数不允许人们在一次测试中得到100分。我不知道这是不是故意的。

这太好了,谢谢。包括100是下一步,我计划做一些像lenuser\u input>2或user\u input==100之类的事情,或者类似的事情。再次感谢。
def get_input ():
    print ('enter a test score below')
    user_in = input()
    if len(user_in) > 2:
        print ('error, you can only enter a 2 digit number.')
        get_input()
    else:
        return user_in