Python 3.14
Ejercicios de Python sobre Excepciones
6 ejercicios de Excepciones en Python. Piensa la respuesta antes de abrirla: la explicación dice por qué las demás opciones fallan.
1 · Elige la respuesta · nivel 1
¿Qué imprime este código?
try: n = int("abc")except ValueError: print("no es un número")- Ano es un número
- B0
- Cabc
- DNada: el programa se detiene con un traceback
Ver la respuesta
Respuesta: A. no es un número
int("abc") lanza ValueError, y el except de ese tipo lo captura: el programa sigue y se ejecuta su bloque. Sin el try, el error terminaría el programa.
2 · Elige la respuesta · nivel 2
¿Qué imprime este código?
def f(): try: return "try" finally: print("finally") print(f())- Afinally try
- Btry finally
- Ctry
- Dfinally
Ver la respuesta
Respuesta: A. finally try
finally se ejecuta siempre antes de salir de la función, incluso con return. El valor "try" ya está decidido y se devuelve después, así que el print exterior va segundo.
3 · Elige la respuesta · nivel 2
¿Qué imprime este código?
data = {"a": 1}try: print(data["b"])except KeyError: print("falta la clave")except Exception: print("otro error")- Afalta la clave
- Botro error
- Cfalta la clave otro error
- DNone
Ver la respuesta
Respuesta: A. falta la clave
Python prueba los except de arriba abajo y ejecuta solo el primero que encaja. KeyError encaja en el primero, así que el segundo, aunque también sirva (KeyError es una Exception), no llega a ejecutarse.
4 · Elige la respuesta · nivel 2
¿Qué imprime este código?
def check(age): if age < 0: raise ValueError("edad negativa") return age try: check(-1)except ValueError as e: print(e)- Aedad negativa
- BValueError
- C-1
- DNone
Ver la respuesta
Respuesta: A. edad negativa
raise lanza la excepción con su mensaje, y `as e` la guarda en e. Al imprimir una excepción se muestra su mensaje, no el nombre de su tipo.
5 · Encuentra el fallo · nivel 2
Debería imprimir 0 al dividir entre cero, pero el programa se detiene con un error. ¿Qué línea tiene el fallo?
1def divide(a, b):2 try:3 return a / b4 except ValueError:5 return 06 7print(divide(4, 0))Ver la respuesta
El fallo está en la línea 4:
except ValueError:Se arregla conexcept ZeroDivisionError:.Dividir entre cero lanza ZeroDivisionError, no ValueError. Un except solo captura los errores de su tipo (o de sus subclases): hay que nombrar el que realmente puede ocurrir.
6 · Ordena las líneas · nivel 2
Ordena la función parse, que devuelve el doble del número o None si el texto no es un número, y después la línea que la prueba.
- return None
- return value * 2
- value = int(text)
- catch ValueError:
- else:
- except ValueError:
- try:
- def parse(text):
- print(parse("21"), parse("x"))
Ver la respuesta
El orden correcto:
def parse(text): try: value = int(text) except ValueError: return None else: return value * 2print(parse("21"), parse("x"))Sobran: catch ValueError:
El bloque else de un try solo se ejecuta si no hubo excepción. Así el try protege únicamente la línea que puede fallar. En Python se escribe except, no catch.