Bienvenido a la Comunidad de Treehouse

¿Quieres colaborar en errores de código? ¿Tienes errores que necesitan comentarios? ¿Buscas un par de ojos adicionales en tu último proyecto? aquí.

¿Buscas aprender algo nuevo?

Treehouse ofrece una prueba gratuita de siete días para estudiantes nuevos. Obtén acceso a miles de horas de contenido y únete a miles de

Inicia tu prueba gratuita

Python Conceptos Básicos de Python Funciones e Iteración Flujo de Excepciones

¿Por qué imprime A, D, F?

No entiendo por qué imprime A, D, F?

print(A)
try:
    resultado = test + 5
    print(B)
except ValueError:
    print(C)
except TypeError:
    print(D)
else:
    print(E)
print(F)

2 Respuestas

Steven Parker
Steven Parker
244 163 puntos

Como conoces la respuesta, deberías haber visto esta explicación cuando la seleccionaste en el cuestionario: "Agregar una cadena y un entero genera un TypeError. Como ocurrió una excepción, el bloque else no se ejecuta."

Si convertimos esa explicación en comentarios línea por línea:

print(A)               # esto imprime la "A"
try:
    resultado = test + 5  # agregar una cadena y un entero genera un TypeError
    print(B)           # por lo que esta línea se omite
except ValueError:       # esta línea también se omite
    print(C)           # esta línea también se omite
except TypeError:        # el código reanuda la ejecución aquí
    print(D)           # esto imprime la "D"
else:                    # como ocurrió una excepción, el bloque else no se ejecuta
    print(E)           # por lo que esta línea se omite
print(F)               # finalmente, esto imprime la "F"
Rick Gleitz
Rick Gleitz
48,549 Points

Hola Svenvanzijl,

A y F se van a imprimir de todas formas porque están fuera de la porción try/except/else del código. Las otras opciones están dentro de la parte try/except/else, así que lo único que hay que averiguar es cuál es. Si el valor de la variable result fuera válido, también imprimiría B (no es válido). ValueError, según tengo entendido, es principalmente para capturar cosas que normalmente no tienen sentido matemático, como calcular la raíz cuadrada de un número negativo, que no es lo que tenemos aquí, así que no imprime C. Sí imprime D porque result intenta agregar dos cosas que son tipos no coincidentes (un entero y una cadena). Finalmente, no imprime E porque sí capturó un error. Así que imprime A, D, F.

Espero que esto te ayude.