Я очень новичок в Python, так что простите меня, если этот вопрос очень прост.
Я пытаюсь обработать прерывание клавиатуры, принимая данные из сокета с помощью выбранного модуля. Итак, у меня есть вызов функции select.select() для ожидания данных из сокета, а затем вывод его на консоль.
При нажатии CTRL_C кажется, что иногда я получаю исключение select.error и иногда exceptions.IOError. Соответствующий код ошибки равен 4 для обоих исключений.
Существует некоторый код, который обрабатывает исключение KeyboardInterrupt глубже в стеке вызовов, поэтому, когда я получаю SIGINT в функции, в которой я принимаю соединение сокета, я просто хочу повторно создать исключение KeyboardInterrupt. Я также хочу уловить связи, связанные с исключениями.
Будет ли безопасно проверять код ошибки исключения и поднять KeyboardInterrupt, если он равен 4? Будет ли это повлиять на мою способность улавливать связанные с подключением исключения? Есть ли хороший ресурс по кодам ошибок?
Благодарю!
errno.EINTR
этого используйте errno.EINTR
. Это безопасно.
>>> import errno
>>> errno.EINTR
4
Однако это не скажет вам, какой сигнал прервал системный вызов, только тот сигнал прервал его.
От человека 2 выберите:
EBADF An invalid file descriptor was given in one of the sets. (Per‐ haps a file descriptor that was already closed, or one on which an error has occurred.) EINTR A signal was caught; see signal(7). EINVAL nfds is negative or the value contained within timeout is invalid. ENOMEM unable to allocate memory for internal tables.