Почему он выдает interrupt exception, который не ловится?

Python может возбудить исключение Interrupt в следующих случаях:

1. Пользователь прерывает выполнение программы нажатием комбинации клавиш Ctrl+C (или Ctrl+Break в Windows). Это прерывание может быть использовано для остановки программы вручную. При этом возбуждается исключение KeyboardInterrupt.

2. Если программа выполняется в интерактивном режиме, то нажатие комбинации клавиш Ctrl+D может привести к завершению программы. При этом возбуждается исключение EOFError.

Обычно, когда возникает исключение, оно может быть перехвачено и обработано с помощью конструкции Try-Except. Однако, в случае исключения Interrupt (KeyboardInterrupt или EOFError), конструкция Try-Except не сработает.

Это происходит потому, что данные исключения считаются серьезными и обработчик исключений не будет выполнен, чтобы предотвратить нежелательные нарушения работы программы.

Однако, можно использовать блок finally, чтобы выполнить определенный код перед завершением программы, даже если произошло необработанное исключение Interrupt. Например:

try:
# Код программы, который может вызвать исключение
pass
except Exception as e:
# Если произошло другое исключение, обработаем его
pass
finally:
# Код, который будет выполнен перед выходом из программы, даже если было исключение Interrupt
pass

Как альтернативу, можно использовать модуль signal, который позволяет обрабатывать сигналы, включая SIGINT (соответствующий прерыванию с клавиатуры). В этом случае можно определить функцию-обработчик, которая будет вызываться при возникновении сигнала, и выполнить нужные действия. Например:

import signal
import sys

def handler(signal, frame):
# Код, который будет выполнен при прерывании с клавиатуры
sys.exit(0)

# Установим обработчик для сигнала SIGINT
signal.signal(signal.SIGINT, handler)

# Остальной код программы

Таким образом, хотя исключение Interrupt в большинстве случаев не может быть перехвачено конструкцией Try-Except, существуют альтернативные способы обработки этого исключения и выполнения нужных действий перед завершением программы.