2017-04-04 3 views
1

평균에 대해 정수 이외의 입력을 방지하려고 시도하지만 TypeError에 대한 Traceback을 계속 수신합니다. 다음은 내 프로그램이며,이 프로그램의 출력은 평균에 대한 INT 이외의 입력 아무것도 시도 할 때 :Python - TypeError : 'NoneType'객체가 반복 가능하지 않습니다.

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() 

역 추적 및 입력 :

당신이 메시지를 인쇄 한 get_name_average 기능에
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 

답변

1

예외 부분 인쇄 ("ERROR !! 정수로 등급 값을 입력하십시오!") 그리고 값을 반환하지 않았습니다.

기본적으로 시스템은 아무런 값도 반환하지 않습니다. & 두 개의 값이 필요합니다. 이름은 평균입니다.

아래 코드를 따라야합니다.

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 

예외가 발생하면 이름, 평균 = 거짓, 거짓.

get_averages 이름이 False이면 하나의 조건을 추가해야합니다. 그러면 시스템이 파일에 쓸 수 없습니다.

이 정보는 도움이됩니다.

+0

감사합니다. – Ablakey

관련 문제