Wpis z mikrobloga

Pytanie do doświadczonych pythonowców:

Mam sytuację przy transakcji gdzie mogę się spodziewać ok. 20 różnych exceptionów (awaria serwera, timeout, 500, transport error etc). Wszystkie z nich traktuje tak samo bo wszystkie oznaczają że mój komunikat nie dojdzie i tylko o to chodzi.

Czy z punktu widzenia 'dobrych praktyk' lepiej nadal wypisywać tych 20 exceptionów, czy lepiej po prostu walnąć:

"""dodać w docu dlaczego zastosowałem ogólny exception"""
try:
costam
except Exception as e:
logger.exception(e)

i mieć święty spokój?

#programowanie #python
  • 15
@Dyzajash:
Jak wiesz, jakie to dokładnie 20 Exceptionów, to lepiej łapać. Dziś godzina roboty więcej, później zmienić to aby jakiś Exception był inaczej obsługiwany będzie cięższe.
Używanie ogólnych Exceptionów jest też niebezpieczne - chcesz złapać jakąś płotkę, a przełapie i przepuści jakiś gruby błąd z innej bajki.
daj spokój, gdzie dobre praktyki programowania?


@Faja: Przechwytywanie konkretnych typów wyjątków jest dobrą praktyką dlatego, że chcemy przechwycić tylko konkretne typy. A co, jeśli chcemy przechwycić WSZYSTKO? Jawnie łapiemy wszystko.

Normalnym też jest, że jeśli chcemy przechwycić wszystkie błędy połączenia to nie łapiemy osobno BadRequestException, TimeoutException i ForbiddenException, tylko łapiemy klasę bazową ConnectionException.
A klasą bazową dla wszystkich exc jest właśnie Exception.

Nie jest to złą praktyką,