Операторы такого типа представляют собой метод многократной обработки нескольких операторов исключений. Давайте изучим вложенность операторов try...Exception на примере.
deftest():n=int(input('Есть 3 оператора для проверки, выберите (1/2/3):')) ifn==1: исключение #keyError my_dict={'dotcpp':123}print ( my_dict['dot'])elifn==2:#IndexError исключение my_list=[1,2,3,4,5]print(my_list[100])elifn==3:#NameErrorException print('переменная не существует dotcpp:',dotcpp)try:try:try:test()ExceptionKeyError:print('Исключение KeyError')ExceptionIndexError:print('Исключение IndexError')ExceptionNameError:print('Исключение NameError')
Мы протестировали 1/2/3 соответственно, и выходные результаты следующие:
Необходимо протестировать 3 оператора, выберите (1/2/3): Исключение 1KeyError. Необходимо протестировать 3 оператора, выберите (1/2/3): Исключение 2IndexError. Необходимо протестировать 3 оператора, выберите (1/2/3): исключение 3NameError
В этом примере мы сначала вводим суждение n в определенную функцию, а затем создаем три исключительные ситуации на основе значения n, а затем вставляем в конец три оператора try..Exception, то есть результат Оператор test() пройдет три уровня оценки.
Полный механизм обработки исключений неотделим от оператораfinally . Функция этого оператора заключается в том, что независимо от того , возникнет ли исключение в нашей программе, код оператораfinally будет выполнен. Его синтаксический формат:
попробуйте:blockException[typeerror]:deal1finally:deal2
Давайте рассмотрим эту структуру на примере:
deftest():n=int(input('Пожалуйста, введите целое число:'))print(n)try:test()ExceptionKeyError:print('Исключение KeyError')finally:print('оператор наконец был выполнен')
Давайте введем 6 и dotcpp соответственно, чтобы увидеть результат:
Введите целое число: оператор 55finally был выполнен Введите целое число: оператор dotcppfinally был выполнен Traceback(mostrecentcalllast):FileC:/Users/test.py,line5,in<module>test() FileC:/Users/test. py, line2,intestn=int(input('Пожалуйста, введите целое число:'))ValueError: validliteralforint()withbase10:'dotcpp'
Из этого примера мы видим, что операторfinally будет выполнен независимо от того, возникло ли исключение в нашей программе.
Операторfinally, который мы узнали выше, — это оператор, который будет выполняться независимо от того, возникнет ли в операторе исключение. Оператор try...кроме...else, который мы узнаем ниже, будет выполняться только тогда, когда в программе не возникает исключения. Его синтаксическая структура:
попробуйте:blockException[typeerror]:deal1else:deal2
Давайте посмотрим на пример ниже:
deftest():n=int(input('Пожалуйста, введите целое число:'))print('Входное значение:',n)try:test()ExceptionValueError:print('Исключение ValueError')else:print(' Текущее В программе не произошло никаких исключений')
Результат:
Введите целое число: 5. Входное значение: 5. В текущей программе нет исключений.
Когда мы вводим значение dotcpp
Введите целое число: исключение dotcppValueError
Мы видим, что оператор else не выполняется, когда программа работает ненормально. Отличить эти операторы несложно. Вы можете попрактиковаться в использовании этих часто используемых операторов обработки исключений.