3

私の知る限り、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についてとても混乱しています。:(

4

1 に答える 1

2

OSErrorとIOErrorのみがerrno値を保持します。はエラーコードsocket.gaierrorを返します。getaddrinfo(3)他の例外は通常、文字列を運ぶだけです。コードはソケットモジュールにあります。-5はsocket.EAI_NODATA、「指定されたネットワークホストは存在しますが、ネットワークアドレスが定義されていない」ことを意味します。

于 2012-09-23T07:22:06.010 に答える