Код Python пропускает предложение try/ кроме

Я работаю над заданием класса, в котором мне нужно поднять два исключения. Первое исключение: я должен вызывать и обрабатывать исключение, если запись пользователя меньше 0 или больше 100. Затем код должен снова попросить пользователя ввести цифру.

Второе исключение: если определенный файл не найден, исключение запрашивает имя файла, а затем поиск повторяется.

В обоих случаях я не могу сделать исключение. Другими словами, если в первом исключении я введу цифру больше 100 или меньше 0, программа продолжит работу и просто не будет ничего записывать для этой записи. Если я распечатываю запись пользователя, я получаю "none", а не сообщение об ошибке, которое должно отображаться в условии кроме. Аналогично, во втором исключении, если файл не найден, код просто прекращает выполнение, а не вызывает исключение.

Я попытался вручную вызвать исключение (как в этом вопросе / ответе), но это создает обратную трассировку, которую я не хочу - я просто хочу, чтобы первое исключение выводило сообщение об ошибке и вызывало функцию, а второе - для запроса ввода и вызвать функцию.

Первое исключение:

def grade():
    #input student's average grade
    avgGrade = int(input("Enter average grade: "))
    try:
        if avgGrade > 0 and avgGrade < 100:
            return avgGrade
    except ValueError:
        print("Grade must be numeric digit between 0 and 100")
        grade()

Второе исключение:

def displayGrades(allStudents):
    try:
        #open file for input
        grade_file = open(allStudents, "r")

        #read file contents
        fileContents = grade_file.read()

        #display file contents
        print(fileContents)

        grade_file.close()

    except IOError:
        print("File not found.")
        allStudents = input("Please enter correct file name: ")
        displayGrades(allStudents)

3 ответа

Похоже, упражнение заключается в raise исключение и обработать его. Вам действительно нужен цикл для продолжения, а не рекурсии, например:

def grade():
    while True:
        try:
            avgGrade = int(input("Enter average grade: "))
            if avgGrade < 0 or avgGrade > 100:
                raise ValueError()
        except ValueError:
            print("Grade must be numeric digit between 0 and 100")
            continue # Loop again
        break # Exit loop
    return avgGrade

Но это придумано с целью исключения, так как исключения в этом случае не нужны.

Для вашего другого примера это менее надумано, потому что функция downstream вызывает исключение, например:

def displayGrades(allStudents):
    while True:
        try:
            with open(allStudents, "r") as grade_file:
               ...
        except IOError:
            allStudents = input("Please enter correct file name: ")
            continue
        break

Хотя я бы рекомендовал смешивать передачу аргументов и ввод данных пользователем в одной и той же функции - обычно исключение отлавливается и обрабатывается там, где пользователь изначально предоставляет имя файла. Так что в этом примере это, вероятно, будет вызывающая функция.

Для первого вы должны поднять его вручную, так как python не будет угадывать вашу логику и поднимет его для вас.

def grade():
    #input student's average grade
    avgGrade = int(input("Enter average grade: "))
    try:
        if avgGrade > 0 and avgGrade < 100:
            return avgGrade
        else:
            raise ValueError()      
    except ValueError:
        print("Grade must be numeric digit between 0 and 100")
        return grade()

Для второго вы должны вернуть значение во втором вызове. использование return displayGrades(allStudents) вместо displayGrades(allStudents)

Попробуй это:

      def get_value(data_list, index):
    return data_list[index]

# Sample list data
my_list = ['a', 'b', 'c']
Другие вопросы по тегам