A veces, no podemos evitar un accidente. Va a ocurrir de todos modos, y todo lo que puedes hacer es prepararte para el impacto.
Hasta ahora.
Veamos un ejemplo basado en la lección de ayer. ##
👉 En este ejemplo, si el archivo ‘Stuff.mine’ no existe, entonces el código arrojará un error ‘no such file’.
myStuff = []
f.open("Stuff.mine","r")
myStuff = eval(f.read())
f.close()
for row in myStuff:
print(row)
La nueva construcción para evitar esto se llama try.... except.
Todo el código que debería funcionar va dentro de try.

Los mensajes de error/instrucciones para manejar cualquier error al ejecutar el código try van dentro de except.

👉 Así:
myStuff = []
try:
f.open("Stuff.mine","r")
myStuff = eval(f.read())
f.close()
# Try to find a file called 'Stuff.mine' and open it
except:
print("ERROR: Unable to load")
# If the file can't be found, show the error instead of crashing the whole program
for row in myStuff:
print(row)
try.... except es genial para mejorar la experiencia del usuario y reducir la frustración.
Sin embargo, hay problemas con sólo poner el código completo en un try except.
Como desarrolladores (sí, ahora eres un desarrollador de software), sería bueno saber qué tipo de error se ha producido para que tengamos una mejor idea de cómo solucionarlo.
Podemos decirle a except qué tipo de error(es) debe buscar. Exception (E mayúscula) significa todo tipo. He capturado el tipo de error en la variable error y lo he impreso para que me diga cuál es el error.
Aquí hay una lista de algunos códigos de error except incorporados.

👉 Mira como he extendido el except ahora.
myStuff = []
try:
f.open("Stuff.mine","r")
myStuff = eval(f.read())
f.close()
# Try to find a file called 'Stuff.mine' and open it
except Exception as err:
print("ERROR: Unable to load")
print(err)
for row in myStuff:
print(row)
Incluso podríamos deshacernos de la variable ‘err’ por completo e imprimir un traceback, que te mostrará el trazado de error rojo que ves cuando python se bloquea.
He creado una variable ‘debugMode’ en la parte superior de mi código y puse el traceback en un if dentro del except.
👉 Esto me permite mostrar/ocultar los tracebacks fácilmente poniendo debugMode en True/False:
debugMode = True
myStuff = []
try:
f.open("Stuff.mine","r")
myStuff = eval(f.read())
f.close()
# Try to find a file called 'Stuff.mine' and open it
except Exception:
print("ERROR: Unable to load")
if debugMode:
print(traceback)
for row in myStuff:
print(row)

*Primero, borra cualquier otro código de tu fichero main.py. Copia cada fragmento de código en main.py haciendo clic en el icono de copia en la parte superior derecha de cada cuadro de código. A continuación, pulsa run y comprueba qué errores se producen. Corrige los errores y pulsa “run” de nuevo hasta que estés libre de errores. Haz clic en “Respuesta” para comparar tu código con el correcto.
👉 ¿Cuál es el problema aquí?
myStuff = []
try:
f.open("Stuff.mine","r")
myStuff = eval(f.read())
f.close()
for row in myStuff:
print(row)
No hay lugar como Roma… O Nápoles, Milán, incluso Nueva York si es necesario.
Pero no los dudosos comerciantes de pan redondo con ingredientes sospechosos de las 2 de la mañana que yo no visito de camino a casa después de salir por la noche.
¡Así es, vas a abrir una pizzería! Intenta no mancharte el teclado de anchoas. Esa cosa nunca se limpia.
En cualquier caso, tu programa de hoy debe:
Utilice try.... except por dos razones:
Ejemplo:
🌟Dave's Pizzas Esquivas🌟
¿Cuántas pizzas? > tres
Debe introducir un carácter numérico, inténtelo de nuevo. > 3
¿De qué tamaño? > XXXXXX
Nombre, por favor > David
Gracias David, tus pizzas costarán XXXXX
La solucion la encontramos en main.py