Перехват ZeroDivisionError - PullRequest
       50

Перехват ZeroDivisionError

0 голосов
/ 07 октября 2019

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

Я попытался переместить деление в другое место функции, а также переместить перехват ошибок деления.

filename = "numbers.txt"

def main():
    total = 0.0
    number = 0.0
    counter = 0
    average = 0


    #Open the numbers.txt file
    try:
        infile = open(filename, 'r')

        #Read the values from the file
        for line in infile:
            counter = counter + 1
            number = float(line)
            total += number

        average = total / counter

        #Close the file
        infile.close()

    except IOError:
        print('An error occurred trying to read the file', end=' ')
        print(filename, '.', sep='')

    except ValueError:
        print('Non-numeric data found in the file', end=' ')
        print(filename, '.', sep='')

    except Exception as err:
        print('A general exception occurred.')
        print(err)

    except ZeroDivisionError:
        print('Cannot devide by zero.')

    else:
        print('Average:', average)
        print('Processing Complete. No errors detected.')




# Call the main function.
main()

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

1 Ответ

1 голос
/ 07 октября 2019

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

except IOError:
    print('An error occurred trying to read the file', end=' ')
    print(filename, '.', sep='')

except ValueError:
    print('Non-numeric data found in the file', end=' ')
    print(filename, '.', sep='')

except ZeroDivisionError:
    print('Cannot devide by zero.')

except Exception as err:
    print('A general exception occurred.')
    print(err)

else:
    print('Average:', average)
    print('Processing Complete. No errors detected.')
...