据我所知,python的异常返回的大部分errnos与“linux/errno.h”中的errnos是一样的。但有时,事情并不像我期望的那样:
例如,当套接字连接抛出 socket.timeout 异常时,它返回的 errno 应该是 110,然而,它的 errno 始终是None
:
try:
address = ('8.8.8.8', 12345)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
s.connect(address)
except EnvironmentError as e:
print e.errno # None
print e.strerror # "time out"
其次,当抛出与地址相关的异常时,errno 将为负数,但 linux/errno.h 中的 errnos 在 1 到 133 之间:
try:
address = ('xxxxxxx', 12345)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(address)
except socket.gaierror, v:
print v[0] # -5
在这种情况下,将打印 -5。
我对所有这些错误感到很困惑。:(