Python-TypeError:';非类型';对象是不可编辑的

Python-TypeError:';非类型';对象是不可编辑的,typeerror,python-3.5,iterable,nonetype,Typeerror,Python 3.5,Iterable,Nonetype,我试图阻止输入除整数以外的任何平均值,但我一直收到对TypeError的回溯。以下是我的程序,以及尝试输入除平均值int以外的任何内容时的程序输出: grades_file = open('grades.txt', 'w') def get_averages(): student = 1 for i in range(3): name, average = get_name_average() student += 1 grade

我试图阻止输入除整数以外的任何平均值,但我一直收到对TypeError的回溯。以下是我的程序,以及尝试输入除平均值int以外的任何内容时的程序输出:

grades_file = open('grades.txt', 'w')

def get_averages():
    student = 1
    for i in range(3):
        name, average = get_name_average()
        student += 1
        grades_file = open('grades.txt', 'a')
        grades_file.write("Student Name: " + name + '\n' + "Student Average: " + str(average) + '\n\n')
        grades_file.close()
        print(("Added %s's average of %i to the file 'grades.txt. You are now entering information for student %i of 12.") % (name, average, student))
def get_name_average():
    student_name = input("Please enter the student's name: ")
    try:
        student_average = int(input(("Please enter the average for %s: ") % student_name))
        verified_average = check_grade_input(student_average)
        return student_name, verified_average
    except ValueError:
        print("ERROR!! Please enter grade value as an integer!")
    except TypeError:
        print('Type error too!')

def check_grade_input(average):
    legal_input = False
    while not legal_input:
        if (average < 0):
            print("Nah bro,  invalid number...")
            average = int(input("Please enter another average that is above 0: "))
        elif (average > 100):
            print("Nah bro,  invalid number...")
            average = int(input("Please enter another average that is below 100: "))
        else:
            return average

def show_grades_file():
    grades_file = open('grades.txt', 'r')
    grade_contents = grades_file.read()
    grades_file.close()
    print("\nThe information you entered for into file 'grades.txt' is:\n\n" + grade_contents)

def main():
    get_averages()
    show_grades_file()

main()
grades\u文件=打开('grades.txt','w')
def get_平均值():
学生=1
对于范围(3)中的i:
name,average=get_name_average()
学生+=1
等级\文件=打开('grades.txt','a')
成绩文件。写(“学生姓名:“+Name+”\n“+”学生平均:“+str(平均值)+”\n\n')
grades_file.close()
打印((“已将%s的平均值%i添加到文件'grades.txt。您现在正在输入学生%i的信息,共12个。”)%(姓名、平均值、学生))
def get_name_average():
学生姓名=输入(“请输入学生姓名:”)
尝试:
student_average=int(输入((“请输入%s:)%student_名称的平均值))
验证平均值=检查分数输入(学生平均值)
返回学生姓名,验证平均值
除值错误外:
打印(“错误!!请以整数形式输入成绩值!”)
除类型错误外:
打印('也有类型错误!')
def检查等级输入(平均值):
合法输入=假
虽然不是合法的输入:
如果(平均值<0):
打印(“Nah-bro,无效号码…”)
average=int(输入(“请输入另一个高于0的平均值:”)
elif(平均值>100):
打印(“Nah-bro,无效号码…”)
average=int(输入(“请输入另一个低于100的平均值:”)
其他:
平均回报率
def show_grades_file():
grades\u文件=打开('grades.txt','r')
grade\u contents=grades\u file.read()
grades_file.close()
打印(“\n您为“grades.txt”文件输入的信息是:\n\n”+grade\u内容)
def main():
获取平均值()
显示等级文件()
main()
回溯和输入:

Please enter the student's name: Aaron
Please enter the average for Aaron: as
ERROR!! Please enter grade value as an integer!
Traceback (most recent call last):
  File "Documents/ProgrammingFundamentals/Lab6/aaron_blakey_Lab6b.py", line 52, in <module>
    main()
  File "Documents/ProgrammingFundamentals/Lab6/aaron_blakey_Lab6b.py", line 49, in main
    get_averages()
  File "Documents/ProgrammingFundamentals/Lab6/aaron_blakey_Lab6b.py", line 13, in get_averages
    name, average = get_name_average()
TypeError: 'NoneType' object is not iterable
请输入学生姓名:Aaron
请输入Aaron:as的平均值
错误!!请以整数形式输入等级值!
回溯(最近一次呼叫最后一次):
文件“Documents/ProgrammingFundamentals/Lab6/aaron_blakey_Lab6b.py”,第52行,在
main()
文件“Documents/ProgrammingFundamentals/Lab6/aaron_blakey_Lab6b.py”,第49行,主目录
获取平均值()
文件“Documents/ProgrammingFundamentals/Lab6/aaron_blakey_Lab6b.py”,第13行,在get_中
name,average=get_name_average()
TypeError:“非类型”对象不可编辑

在函数获取\u name\u average中,您已经在异常部分打印了消息打印(“错误!!请以整数形式输入成绩值!”)并且您没有返回任何值

默认情况下,系统将不返回任何值&需要两个值名称、平均值

您需要遵循以下代码

def get_name_average():
    student_name = input("Please enter the student's name: ")
    try:
        student_average = int(input(("Please enter the average for %s: ") % student_name))
        verified_average = check_grade_input(student_average)
        return student_name, verified_average
    except ValueError:
        print("ERROR!! Please enter grade value as an integer!")
        return False,False
    except TypeError:
        print('Type error too!')
        return False,False
之后,若你们得到了异常,那个么name,average=False,False

在函数get_averages中,您需要添加一个条件,如果名称为False,则系统不应在文件中写入

这可能对你有帮助