1

我对 Python 很陌生,所以如果这个问题非常基本,请原谅我。

我正在尝试在使用选择模块从套接字接受数据时处理键盘中断。所以,我有一个 select.select() 函数调用来等待来自套接字的数据,然后将其输出到控制台。

按下 CTRL_C 时,似乎有时会出现 select.error,有时会出现 exceptions.IOError 异常。两种异常对应的错误代码均为 4。

有一些代码在调用堆栈中更深地处理 KeyboardInterrupt 异常,因此当我在接受套接字连接的函数中获得 SIGINT 时,我只想重新引发 KeyboardInterrupt 异常。我还想捕获与连接相关的异常。

检查异常的错误代码是否安全,如果它是 4 则引发 KeyboardInterrupt?这会影响我捕获与连接相关的异常的能力吗?有没有关于错误代码的好资源?

谢谢!

4

1 回答 1

1

改为使用errno.EINTR。这是安全的。

>>> import errno
>>> errno.EINTR
4

但是,这不会告诉您哪个信号中断了系统调用,只会告诉您某个信号中断了它。

man 2 中选择

EBADF 在其中一组中给出了无效的文件描述符。(每-
       有一个已经关闭的文件描述符,或者一个已关闭的文件描述符
       发生了错误。)

EINTR 一个信号被捕获;见信号(7)。

EINVAL nfds 为负数或超时中包含的值为
       无效的。

ENOMEM 无法为内部表分配内存。
于 2011-09-08T21:23:49.980 回答