私の知る限り、Pythonの例外によって返されるerrnoのほとんどは、「linux/errno.h」のerrnoと同じです。しかし、時々、物事は私が期待するものとは異なります:
たとえば、ソケット接続が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のerrnoは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を出力します。
私はこれらすべてのerrnoについてとても混乱しています。:(