Quiero manejar AssertionError
s tanto para ocultar partes innecesarias de la traza de la pila del usuario como para imprimir un mensaje sobre por qué ocurrió el error y qué debe hacer el usuario al respecto.¿Cómo manejar AssertionError en Python y descubrir en qué línea o enunciado se produjo?
¿Hay alguna manera de averiguar en qué línea o declaración falló el assert
dentro del bloque except
?
try:
assert True
assert 7 == 7
assert 1 == 2
# many more statements like this
except AssertionError:
print 'Houston, we have a problem.'
print
print 'An error occurred on line ???? in statement ???'
exit(1)
yo no quiero tener que añadir esto a cada declaración afirman:
assert 7 == 7, "7 == 7"
porque se repite la información.
Dos problemas. Primero, si tiene problemas para identificar dónde ocurre la excepción en su 'try..except', eso es una señal de que su bloque' try..except' es demasiado grande. En segundo lugar, el tipo de cosa que debe ser atrapada por 'assert' no es algo que el usuario deba ver nunca. Si ven un 'AssertionError', el curso de acción apropiado es que se comuniquen con el programador y digan "WTF ?!". –
@John Y, pareces confundido. Usted está diciendo que 'AssertionError's no debería ser visto por el usuario, y luego lo que el usuario debería hacer cuando lo vea. No puede ser ambos! – devtk
BTW: las afirmaciones deben ser sobre la estructura de su código, es decir, una afirmación debe fallar solo si tiene un error en su software. No deben usarse para verificar la entrada del usuario. Puede considerar usar una excepción diferente para esta aplicación. –