据我所知,python的异常返回的errnos大部分与“linux/errno.h”中的errnos相同。但有时,事情并不像我期望的那样:
例如,当一个socket连接抛出一个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。
我对所有这些错误感到很困惑。 :(
最佳答案
只有 OSError 和 IOError 带有 errno 值。 socket.gaierror
将返回一个 getaddrinfo(3)
错误代码。其他异常通常只是携带字符串。代码在套接字模块中。 -5 是 socket.EAI_NODATA
,表示“指定的网络主机存在,但没有定义任何网络地址”。
关于python - python 异常包含的 errnos 是否与 "linux/errno.h"中的 errnos 相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12550379/