跨不同平台的python中errno模块的可用性

在查看系统库socket.py实现时,我遇到了这段代码

try:
    import errno
except ImportError:
    errno = None
EBADF = getattr(errno, 'EBADF', 9)
EINTR = getattr(errno, 'EINTR', 4)

这段代码只是过去时代的遗留物,还是有没有errno模块的平台/实现?

为了更明确,在没有异常处理程序的情况下导入errno是否安全?

我对python 2.x和3.x的答案感兴趣.

编辑

澄清问题:我必须测试在套接字模块内引发的IOError异常中编码的错误代码.上面的代码在cpython code base中,让我对可用套接字的已知情况感到怀疑,但import errno会失败.也许是一个小问题,但我想避免不必要的代码.

最佳答案 errno自Python 1.4起可用. ENOENT等名称的可用性可能取决于平台:
errno module source中有大量的ifdef.“.errno.h”标题在./configure中检查,因此它可能无法在任何地方使用(似乎它没有用于WinCE)但它不应该阻止导入错误.

Here’s the initial revision that introduces errno=None

 try:
-    from errno import EBADF
+    import errno
 except ImportError:
-    EBADF = 9
+    errno = None
+EBADF = getattr(errno, 'EBADF', 9)
+EINTR = getattr(errno, 'EINTR', 4)

我之前可以理解状态:从errno导入EBADF可能引发ImportError,因为EBADF可能在系统上不可用.国家之后,我不明白.我认为在任何平台上,导入errno应该总是在CPython上成功.

点赞