Pytanie:
Czy są jakieś szanse, że finally
blok kodu Pythona może nie zostać wykonany, gdy system operacyjny jest nadal uruchomiony?
Cel, powód:
Muszę kontrolować maszynę z Linux-em. Sygnał squarewave dla silnika krokowego jest generowany przez program zewnętrzny w tym samym środowisku i jeśli nie mógłbym z jakiegoś powodu zatrzymać sygnału squarewave, maszyna zostałaby fizycznie uszkodzona. Tak więc, bardzo ważne jest wywołanie programu zewnętrznego " W każdym razie s stop metody, bez względu na to, jak moja aplikacja jest rozbita.
Odpowiedzi:
3 dla odpowiedzi № 1Według urzędnika dokumentacja:
Klauzula finally jest zawsze wykonywana wcześniejpozostawiając wyrażenie try, czy wystąpił wyjątek, czy nie. Gdy wystąpi wyjątek wystąpił w klauzuli try i nie został obsłużony przez wyjątek (lub zdarzyło się w klauzuli except lub else), to jest ponownie podbite po wykonaniu klauzuli finally. W końcu klauzula jest również wykonywana "w drodze", gdy jakakolwiek inna klauzula Instrukcja try jest pozostawiona przez instrukcję break, continue lub return.
W każdym razie, w pewnych okolicznościach (np., program ulega awarii), nadal może się zdarzyć, że program nie wejdzie do instrukcji finally, ale w tym momencie, aby zapobiec uruchomieniu zasobów (np. sesji bazy danych) po awarii programu, trzeba użyć innego mechanizmu (monitorowanie i wkrótce).