Conviene prevenir errores con los que se pueda enfrentar el usuario.
Al hacer pop en una lista se elimina el último elemento.
En una lista vacía dará error.
l=[1,2,3]
l.pop()
l.pop()
l.pop() # aquí ya estamos en una lista vacía
#l.pop() # aquí dará error
Podemos prevenir el error con un if.
l=[1,2,3]
if len(l)>1: # podemos ejecutar este código más de 3 veces y no producirá error
l.pop()
Al dividir un número entre cero obtenemos un error.
def divide(a,b):
if b == 0:
return None # su b es cero se retorna None que evita el error
return a/b
a = 15
b = 0
divide(a,b)
Si el usuario introduce un texto en lugar de un número para evitar que se produzca un error debemos realizar un manejo de excepciones con try
y except
.
El siguiente código es igual que el anterior, pero una de las variables contiene un string, por lo que dará error.
def divide(a,b):
if b == 0:
return None # su b es cero se retorna None que evita el error
return a/b
a = 15
b = 'asdf'
divide(a,b)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-2-a92d8a52dcc4> in <module> 5 a = 15 6 b = 'asdf' ----> 7 divide(a,b) <ipython-input-2-a92d8a52dcc4> in divide(a, b) 1 def divide(a,b): 2 if b==0: return None # su b es cero se retorna None que evita el error ----> 3 return a/b 4 5 a = 15 TypeError: unsupported operand type(s) for /: 'int' and 'str'
try
y except
¶try:
x = float(input("Introduzca un número: ")) # introduciendo un texto se produce un error
y = 10
print(f'{x} / {y} = {x/y}')
except:
print("Se produjo un error. Introduzca un número válido.") # imprimimos una frase cuando se produce una excepción
while
¶while True:
try:
x = float(input("Introduzca un número: "))
y = 10
print(f'{x} / {y} = {x/y}')
break # aquí se rompe el bucle si todo ha ido bien
except:
print("Se produjo un error. Introduzca un número válido.")
else
¶Este será el lugar adecuado para incluir el break
.
while True:
try:
x = float(input("Introduzca un número: "))
y = 10
print(f'{x} / {y} = {x/y}')
except:
print("Se produjo un error. Introduzca un número válido.")
else:
print("Cálculo correctamente realizado.")
break # aquí se rompe el bucle si todo ha ido bien
finally
¶while True:
try:
x = float(input("Introduzca un número: "))
y = 10
print(f'{x} / {y} = {x/y}')
except:
print("Se produjo un error. Introduzca un número válido.")
else:
print("Cálculo correctamente realizado.")
break # aquí se rompe el bucle si todo ha ido bien
finally:
print("Fin del bucle") # siempre se ejecutará
Introduzca un número: 456 456.0 / 10 = 45.6 Cálculo correctamente realizado. Fin del bucle
Siempre que se invoque la función se ejecutará el código que hay en finally
, se produzca o no la excepción. Ese código está asociado a la función.
def test(n):
try:
print("Función en marcha.")
return 10/n
except:
return "Ha ocurrido un error, finalizando el código."
finally:
print("Este código siempre se ejecuta.")
n = test(20)
print(n)
Función en marcha. Este código siempre se ejecuta. 0.5
n = test(0) # si el argumento es 0 se produce una división por cero y salta la excepción
print(n) # el código que hay en finally siempre se ejecuta, salte o no la excepción
Función en marcha. Este código siempre se ejecuta. Ha ocurrido un error, finalizando el código.