可用性のために一連のURLをテストしているスクリプトを実行しています。Pythonソケットエラーの復元力/回避策
これは機能の1つです。
def checkUrl(url): # Only downloads headers, returns status code.
p = urlparse(url)
conn = httplib.HTTPConnection(p.netloc)
conn.request('HEAD', p.path)
resp = conn.getresponse()
return resp.status
時々、VPSの接続が失われ、そのときにスクリプト全体がクラッシュすることがあります。
File "/usr/lib/python2.6/httplib.py", line 914, in request
self._send_request(method, url, body, headers)
File "/usr/lib/python2.6/httplib.py", line 951, in _send_request
self.endheaders()
File "/usr/lib/python2.6/httplib.py", line 908, in endheaders
self._send_output()
File "/usr/lib/python2.6/httplib.py", line 780, in _send_output
self.send(msg)
File "/usr/lib/python2.6/httplib.py", line 739, in send
self.connect()
File "/usr/lib/python2.6/httplib.py", line 720, in connect
self.timeout)
File "/usr/lib/python2.6/socket.py", line 561, in create_connection
raise error, msg
socket.error: [Errno 101] Network is unreachable
これはPythonでこのようなエラーを処理することに全く慣れていません。
ネットワーク接続が一時的に失われたときにスクリプトがクラッシュするのを防ぐ適切な方法は何ですか?
編集:私はこれで終わった
- フィードバックを?
def checkUrl(url): # Only downloads headers, returns status code.
try:
p = urlparse(url)
conn = httplib.HTTPConnection(p.netloc)
conn.request('HEAD', p.path)
resp = conn.getresponse()
return resp.status
except IOError, e:
if e.errno == 101:
print "Network Error"
time.sleep(1)
checkUrl(url)
else:
raise
私は完全にかかわらず..
質問をする前にPythonのドキュメントを読んでください:http://docs.python.org/tutorial/errors.html – gecco