1. ホーム
  2. python

[解決済み] (python) [Errno 11001] getaddrinfo に失敗しました。

2022-02-07 16:10:23

質問

どうすればこのエラーをキャッチできるのか、どなたか教えてください。

import pygeoip  
gi = pygeoip.GeoIP('GeoIP.dat')  
print gi.country_code_by_name('specificdownload.com')  

Traceback (most recent call last):  
  File "<module1>", line 14, in <module>  
  File "build\bdist.win-amd64\egg\pygeoip\__init__.py", line 447, in country_code_by_name  
    addr = self._gethostbyname(hostname)  
  File "build\bdist.win-amd64\egg\pygeoip\__init__.py", line 392, in _gethostbyname  
    return socket.gethostbyname(hostname)  
gaierror: [Errno 11001] getaddrinfo failed 

解決方法は?

では、Pythonにどのような例外なのか聞いてみましょう。

#!/usr/bin/env python2.7

import pygeoip
gi = pygeoip.GeoIP('GeoIP.dat')
try:
    print gi.country_code_by_name('specificdownload.com')
except Exception, e:
    print type(e)
    print e

プリントする。

$ ./foo.py
<class 'socket.gaierror'>
[Errno 8] nodename nor servname provided, or not known

をキャッチする必要があります。 socket.gaierror というように。

#!/usr/bin/env python2.7

import pygeoip
import socket
gi = pygeoip.GeoIP('GeoIP.dat')
try:
    print gi.country_code_by_name('specificdownload.com')
except socket.gaierror:
    print 'ignoring failed address lookup'

という疑問は残りますが。 gaierror ? Googleで調べると その socket.gaierror ドキュメンテーション と書いてある。

この例外は、アドレス関連のエラーの場合、次のように発生します。 getaddrinfo()getnameinfo()

GAI Error = Get Address Info Error ということですね。