piszę trochę kodu w Pythonie coś takiego:W języku Python, czy mogę zapobiec przechwyceniu funkcji KeyboardInterrupt i SystemExit?
import sys
try:
for x in large_list:
function_that_catches_KeyboardInterrupt(x)
except KeyboardInterrupt:
print "Canceled!"
sys.exit(1)
Kiedy próbuję przerwać pętlę, ja w zasadzie trzeba przytrzymać Kontroli + C wystarczająco długo, aby anulować każde wywołanie funkcji dla wszystkich elementów large-list
, a dopiero potem mój program zakończy działanie.
Czy jest jakiś sposób, żebym mógł uniemożliwić funkcję przechwytywania Klawiatury Przerwać, aby samemu ją przechwycić? Jedynym sposobem, jaki mogę wymyślić jest nadużywanie wątków poprzez tworzenie oddzielnego wątku tylko dla wywołania funkcji, ale wydaje się to przesadne.
Edycja: Sprawdziłem kod naruszający prawa (którego nie mogę łatwo zmienić), a on faktycznie używa gołego except:
, więc nawet sys.exit(1)
został złapany jako wyjątek SystemExit
. Jak mogę uciec z pustego bloku except:
i zamknąć program?
Nie wydaje mi się to zbytnim przesadnym ... także dlatego, że każde inne rozwiązanie, jakie wymyślę, wiązałoby się z pewnym rodzajem czerni magic ... – GaretJax
Pamiętaj, że nie musisz używać nici do każdego wywołania, wystarczy tylko jeden. ;-) – GaretJax