El try y except no son los únicos bloques que se pueden ejecutar, existen también el else y el finally
try: # Código a ejecutar
except: # Código para 'cachar' o 'recibir' el error y hacer algo
else: # Código cuando el trySÍ sirva y NO se ejecute el except
finally: # Código que SIEMPRE se va a ejecutar, independientemente se ejecute el except o el else
Suerte 😉
Jeje David siempre explicó eso pero no me había dado cuenta xD
De todos modos, sólo tienen la implementación aquí y como siempre, él lo explica todo genial 😉
lol
La sintaxis para el manejo de errores es:
try: #Ejecuta el código si no hay errores
except ValueError: #Se ejecuta en caso de conseguir un error
Finally: #Se ejecuta pase lo que pase
• Try: Es como el try de SQL, es el código que se ejecutará y estará protegido si se produce un error.
• Except: Es como el “Catch” de SQL, es el código que se ejecutará si en el “try” anterior se produjo un error
• Else: Si no se produce un error en el “try”, la ejecución del código seguirá adelante.
• Finally: Siempre se llevará a cabo no importa si se produce o no un error.
Un ejemplo mas:
>>> def dividir(x, y):...try:... result = x / y
... except ZeroDivisionError:...print("¡división por cero!")...else:...print("el resultado es", result)...finally:...print("ejecutando la clausula finally")...>>>dividir(2,1)el resultado es 2.0ejecutando la clausula finally>>>dividir(2,0)¡división por cero!ejecutando la clausula finally>>>divide("2","1")ejecutando la clausula finallyTraceback(most recent call last):File"<stdin>", line 1,in<module>File"<stdin>", line 3,in divide
TypeError: unsupported operand type(s)for/:'str' and 'str'
Es podría ser la estructura de un bloque con manejo de errores:
try:print("Hello")except:print("Algo salio mal")else:print("Nada salio mal")finally:print("se finalizo el bloque try")```
¿Qué tipos de errores existen en programación?
A la hora de programar pueden surgir diferentes tipos de errores, sin embargo, el tipo de error depende mucho en qué momento se da:
1. Error de sintaxis: llamado también como error en tiempo de diseño, este sucede cuando en el código escribes mal una palabra reservada y el lenguaje no puede compilarlo o interpretarlo para ejecutarlo.
Por ejemplo:
prrint(“Este es un mensaje”) #la palabra reservada print está mal escrita.print(“Este es otro mensaje”) #la palabra reservada print está bien escrita.
**2. Error lógico (lógicos): **El error lógico es el más difícil de encontrar, obviamente dependiendo del problema que se esté codificando, puesto que un error lógico si permite que el programa se ejecute, pero el resultado esperado pueda no ser el deseado.
Por ejemplo: si se quiere sumar dos números y usted por error coloco la siguiente línea.
a = b * c #usted erróneamente coloco un asterisco en vez de una suma.
Como indique, para algoritmos más complejos y que tienen un grado de dificultad pueda no ser fácil encontrar este tipo de error, para eso se hace uso de algo que se llamaba debugging (depuración de programas), esto consiste en ejecutar línea a línea viendo cómo cambian los valores de las variables para determinar dónde está el error.
3. Error de ejecución: llamado también como error en tiempo de ejecución, en este punto el programa funciona de manera adecuada, pero el error se presenta de manera inducida por parte del usuario o de manera inesperada por algún problema de la máquina o porque tiene un error lógico que conlleva a un error de ejecución.
Por Ejemplo: se quiere pedir dos números y sumarlos.
num1=int(input("Digite numero 1:"))num2=int(input("Digite numero 1:"))suma=num1+num2
print("la suma es: "+str(suma))
El código anterior no presenta ni error sintáctico ni error lógico (versión 2.7 de python), pero, aunque allí se le pide al usuario digitar solamente números, yo como programador no tengo la capacidad de obligarlo a que lo digite, pues él usuario puede colocar letras lo cual generará un error al momento de asignar el dato en la variable.
Para este tipo de casos es que se utiliza la cláusula try.
Excelente aporte. Muchas gracias.
Ejemplo:
>>>whileTrue:...try:... x =int(input("Por favor ingrese un número: "))...break... except ValueError:...print("Oops! No era válido. Intente nuevamente...")...
try = el código que puede generar error
except = es el manejo de error
else= se ejecuta si no han ocurrido excepciones
finally = pedazo de código que se ejecuta siempre
try:"""(BloqueObligatorio)Código en el que pienses que pueda ocurrir un error.Ten en cuenta que cuando haya error, la siguiente línea que se ejecutaría es la del except, es decir salta a ese bloque, sin terminar lo que faltaba del bloque try"""except:"""(BloqueObligatorio)Código que se ejecuta en caso que SI haya error."""else:"""(BloqueOpcional).código que se ejecuta en caso que NO haya error."""finally:"""(BloqueOpcional).Código que siempre se ejecuta, haya o no haya error."""
MANEJO DE ERRORES EN PYTHON
Al realizar operaciones invalidas en python, este avienta (throw) un error, cuando este ocurre, el programa se detiene. Python provee herramientas para poder manejarlos. la sintaxis es generar un bloque de codigo, encapsularlo y manejar el error.
keywords para el manejo de errores
try / except / else / finally
try: en donde se pone el bloque de error que posiblemente puede generar un error para ser manejado
except: manejo dle error
else: es el codigo que se ejecuta si no sucede algun error
finally: el codigo ubicado despues de esta keyword se ejecuta siempre
Ej.:
mi_string = 'una cadena de texto'
try:
int(mi_string)
except ValueError:
# Manejo del error
Finally:
# Continua la ejecucion a pesar del error
Python posee una jerarquia de errores (arbol), estos empiezan con una excepcion base y a partir de esta se especifica el tipo.
Nota: Finally siempre se ejecuta
Manejo de los errores:
try: Encapsular los errores
except: manejo del error
else: ejecutar código si no sucede ningún error
finally: se ejecuta siempre sin importar lo que suceda
Les comparto , mi código haciendo uso de try/ except/else/ finally
# -*- coding:utf-8def run():print('verifiquemos numeros:: ')whileTrue:try: # encapsulo la línea de código con posible error
x =int(input('Enter a Number ::')) except ValueError: # Se ejecuta,Si el usuario ingresa algo diferente a un número
print('This is not a number, enter a number again')else: # Se ejecuta,Si el usuario ingresa un número
y =x+1print(y)finally: # Siempre se ejecuta , es la opción para salir del programa
letter =input('Enter "x" to exit the program ::: ')if letter=='x':breakif __name__=='__main__':run()
Que gran ejemplo 😄
Manejo de Errores
El manejo de errores tiene cuatro bloques de código try, except, else y finally
try: bloque de código donde puede ocurrir un error
except: bloque de código que se ejecuta cuando ocurre un error en el bloque try
else: bloque de código que se ejecuta si no ocurre ningún en el try
finally: bloque de código que se ejecuta sin importar que halla en los ```except o else``
Ejemplo
try:8/0except ZeroDivisionError:print('a ocurrido un error, todo OK')else:print('no ocurrio error, todo OK')finally:print('El programa ha terminado')
Otro ejemplo:
import sys
try: f =open('miarchivo.txt') s = f.readline() i =int(s.strip())except OSErroraserr:print("Error OS: {0}".format(err))except ValueError:print("No pude convertir el dato a un entero.")except:print("Error inesperado:", sys.exc_info()[0]) raise
Algunos tipos de errores que provocan que el programa se detenga:
Un indice no encontrado en una lista.
Una llave no encontrada en un diccionario.
Se esperaba que el usuario para una variable ingresara un numero int o float y en ves de esto ingresa un alfanumérico.
División cero.
Hola acá les dejo un ejemplo de como se manejaría la división entre cero:
numero =int(input('ingrese numero: '))try: x=3/numero
except ZeroDivisionError:print('no se puede dividir entre cero')else:print('division correcta ', x)finally:print('fin')
No me termina de cerrar el concepto de “finally” y un caso de uso útil. Si siempre se va a ejecutar, cual es su propósito? No es lo mismo seguir con código por fuera de la estructura?
try:8/0except ZeroDivisionError:print('a ocurrido un error, todo OK')else:print('no ocurrio error, todo OK')finally:print('El programa ha terminado')
No seria equivalente a:
try:8/0except ZeroDivisionError:print('a ocurrido un error, todo OK')else:print('no ocurrio error, todo OK')print('El programa ha terminado')
Si bien parece similar no lo es, ya que si la excepción no es controlada o tenida en cuenta dentro de las excepciones se lanzara el finally antes que el error no manejado ocurra. si pruebas tu código pero reemplazando el 8/0 por “8”/“1”, se ejecutara primero el código del finally y luego lanzara la excepción.
Hay veces que quieres realizar una operación con independencia de que un bloque de código sea exitoso o no. Por ejemplo, al abrir un archivo siempre quieres cerrarlo sin importar lo que pase. Otro ejemplo, cuando abres una conexión a una base de datos, no se te puede olvidar cerrarla.
Imagina que tu código avienta un error en el try que no estás atrapando en el catch, o avienta un nuevo error en el catch que no tenías esperado, ¿qué pasa? El programa va a salir, pero los recursos del sistema que se utilizaron para abrir la conexión no se van a liberar.
En tu ejemplo, un error que podrías generar que no estás atrapando es si cambias 8/0 por 8/'0'. El error sería TypeError y ese no va a caer en el catch block. También, el código fuera del try/catch ya no se ejecutaría porque el programa va a terminar porque el error no se manejó.
El manejo de errores se usa mucho para evitar que nuestra programa arroje un error lleno de detalles técnicos e iconos de advertencia a los usuarios finales, quienes en realidad en primer lugar no van a entender absolutamente nada de lo que se diga en esas pantallas y en segundo lugar de una vez etiquetaran a nuestro sistema de inservible.
¿En Python existe otra forma diferente de hacer control de errores distinta a try... Except?
Hola,
Busca en la documentación de Python la función 'raise ', te sirve para levantar errores cuando algo, que tu puede definir a través de un if por ejemplo, sucede.