Chcę obsługiwać AssertionError
s zarówno w celu ukrycia niepotrzebnych części śladu stosu od użytkownika, jak i wydrukowania komunikatu, dlaczego błąd wystąpił i co powinien zrobić użytkownik.Jak radzić sobie z AssertionError w Pythonie i dowiedzieć się, na którym wierszu lub instrukcji wystąpił?
Czy istnieje sposób sprawdzenia, w którym wierszu lub oświadczeniu nie powiodło się assert
w bloku 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)
nie chcę mieć do tego dodać do każdego rachunku assert:
assert 7 == 7, "7 == 7"
ponieważ powtarza informacje.
Dwa numery. Po pierwsze, jeśli masz problem ze zidentyfikowaniem wyjątku w 'try..except', to znak, że twój blok' try..except' jest za duży. Po drugie, coś, co powinno zostać złapane przez 'assert', nie jest czymś, co użytkownik powinien kiedykolwiek zobaczyć. Jeśli widzą "AssertionError", właściwym sposobem działania jest skontaktowanie się z programistą i powiedzenie "WTF ?!". –
@John Y, wydajesz się zdezorientowany. Mówisz, że 'AssertionError's nie powinien być widziany przez użytkownika, a następnie, co użytkownik powinien zrobić, gdy widzi jeden. To nie może być jedno i drugie! – devtk
BTW: Asserts powinno dotyczyć struktury twojego kodu, to znaczy, że asercja powinna zawodzić tylko wtedy, gdy masz błąd w swoim oprogramowaniu. Nie powinny być używane do sprawdzania danych wprowadzanych przez użytkownika. Możesz rozważyć użycie innego wyjątku dla tej aplikacji. –