Лично я не мог использовать try / кроме KeyboardInterrupt, потому что я использовал режим стандартного сокета (IPC), который блокирует. Таким образом, SIGINT был задан, но пришел только после получения данных на сокете.
Настройка обработчика сигнала ведет себя так же.
С другой стороны, это работает только для реального терминала. Другие начальные среды могут не принять Ctrl + C или предварительно обработать сигнал.
Кроме того, в Python есть «Исключения» и «BaseExceptions», которые отличаются в том смысле, что интерпретатору необходимо завершать работу самостоятельно, поэтому некоторые исключения имеют более высокий приоритет, чем другие (исключения получены из BaseException)