Este tipo de declaración es un método de procesamiento múltiple de múltiples declaraciones excepto. Aprendamos el anidamiento de declaraciones try...except a través de un ejemplo.
deftest():n=int(input('Hay 3 declaraciones para probar, seleccione (1/2/3):')) ifn==1: #keyError excepción my_dict={'dotcpp':123}print ( my_dict['punto'])elifn==2:#IndexError excepción my_list=[1,2,3,4,5]print(my_list[100])elifn==3:#NameError excepción print('no existe Variable dotcpp:',dotcpp)try:try:try:test()exceptKeyError:print('Excepción de KeyError')exceptIndexError:print('Excepción de IndexError')exceptNameError:print('Excepción de NameError')
Probamos 1/2/3 respectivamente y los resultados de salida son los siguientes:
Hay 3 declaraciones para probar, seleccione (1/2/3): 1Excepción de KeyError Hay 3 declaraciones para probar, seleccione (1/2/3): 2Excepción de IndexError Hay 3 declaraciones para probar, seleccione (1/ 2/3): excepción 3NameError
En este ejemplo, primero ingresamos un juicio n en la función definida, y luego damos tres situaciones de excepción basadas en el valor de n, y luego anidamos tres declaraciones try...except al final, es decir, el resultado de La declaración test() pasará por tres niveles de juicio.
Un mecanismo completo de manejo de excepciones es inseparable de la declaración finalmente . La función de esta declaración es que independientemente de si ocurre una excepción en nuestro programa, se ejecutará el código bajo la declaración finalmente. Su formato de sintaxis es:
intente: bloquear excepto [tipo error]: trato1 finalmente: trato2
Echemos un vistazo a esta estructura a través de un ejemplo:
deftest():n=int(input('Ingrese un número entero:'))print(n)try:test()exceptKeyError:print('Excepción de KeyError')finally:print('finalmente se ha ejecutado la declaración')
Ingresemos 6 y dotcpp respectivamente para ver el resultado:
Ingrese un número entero: 55finally se ha ejecutado la declaración Ingrese un número entero: dotcppfinally la declaración se ha ejecutado Traceback(mostrecentcalllast):FileC:/Users/test.py,line5,in<module>test()FileC:/Users/test. py, line2,intestn=int(input('Ingrese un número entero:'))ValueError: invalidliteralforint()withbase10:'dotcpp'
En este ejemplo podemos ver que la declaración finalmente se ejecutará independientemente de si ocurre una excepción en nuestro programa.
La declaración finalmente que aprendimos anteriormente es una declaración que se ejecutará independientemente de si ocurre una excepción en la declaración. La declaración try...except...else que aprenderemos a continuación solo se ejecutará cuando no ocurra ninguna excepción en el programa. Su estructura de sintaxis es:
intente: bloquear excepto [tipo error]: trato1 más: trato2
Veamos un ejemplo a continuación:
deftest():n=int(input('Ingrese un número entero:'))print('El valor de entrada es:',n)try:test()exceptValueError:print('Excepción de ValueError')else:print(' Actual No ocurrió ninguna excepción en el programa')
La salida es:
Ingrese un número entero: 5. El valor de entrada es: 5. No hay ninguna excepción en el programa actual.
Cuando ingresamos el valor dotcpp
Introduzca un número entero: excepción dotcppValueError
Podemos ver que la declaración else no se ejecuta cuando el programa es anormal. No es difícil distinguir estas declaraciones. Puede practicar estas declaraciones de manejo de excepciones de uso común a través de ejemplos.