Krótko mówiąc, mam znaczącą aplikację Python, która między innymi wykracza na "stracenie", "montowanie" itp. W systemie Linux. Zasadniczo zużywa zasoby systemowe, które muszą zostać zwolnione po ukończeniu.Czy ma zastosowanie obsługa wyjątków dla całej aplikacji?
Jeśli moja aplikacja ulegnie awarii, chcę się upewnić, że zasoby systemowe zostały poprawnie zwolnione.
Czy ma sens wykonanie następujących czynności?
def main():
# TODO: main application entry point
pass
def cleanup():
# TODO: release system resources here
pass
if __name__ == "__main__":
try:
main()
except:
cleanup()
raise
Czy jest to zazwyczaj wykonywane? Czy istnieje lepszy sposób? Być może destruktor w klasie singleton?
Obsługa wyjątków najwyższego poziomu jest przydatna w aplikacjach GUI. Nieprzeniknione wyjątki generowane w procedurach obsługi zdarzeń pojawią się w konsoli, ale generalnie nie spowodują awarii programu (np. W PyGTK i PyQt), może to pozostać niezauważone. Jeśli wyświetlisz okno dialogowe błędu w module obsługi, nie masz tego problemu. –
Proponuję również, aby umieścić je w aplikacjach konsolowych, które przetwarzają wsadowo. Mam je wysłać e-mail, abyśmy mogli być powiadamiani o wszelkich problemach, ale przynajmniej mógł to zarejestrować. –