2012-01-06 28 views
8

まず、私の問題はthis oneと非常に似ています。私はurllib.urlopen()のタイムアウトが私が処理できる例外を生成するようにしたいと思います。Python 3でurllibのタイムアウトを処理する方法は?

URLErrorに該当しませんか?

try: 
    response = urllib.request.urlopen(url, timeout=10).read().decode('utf-8') 
except (HTTPError, URLError) as error: 
    logging.error(
     'Data of %s not retrieved because %s\nURL: %s', name, error, url) 
else: 
    logging.info('Access successful.') 

エラーメッセージ:

RESP = urllib.request.urlopen(REQ、タイムアウト= 10).read()( 'UTF-8')を復号
ファイル「の/ usr。 /lib/python3.2/urllib/request.py "、138行目、urlopen
return opener.open(url、data、timeout)
ファイル" /usr/lib/python3.2/urllib/request.py "、行369、オープン中
レスポンス= self._open(req、data)
ファイル" /usr/lib/python3.2/urllib/request.py "、387行目、_open
'_open'、req)
ファイル" /usr/lib/python3.2/urllib/request.py "、行347、http_open
で_call_chainで
結果= funcを(*引数)
ファイル "/usr/lib/python3.2/urllib/request.py"、ライン1156、リターンself.do_open(http.client.HTTPConnection do_open
R = h.getresponseにおいて、REQ)
ファイル "/usr/lib/python3.2/urllib/request.py"、ライン1141()
ファイル「/usr/lib/python3.2/ http/client.py "、行1046、getresponse
sponse.begin()
ファイル "/usr/lib/python3.2/http/client.py"、ライン346は、内
バージョン、ステータス、理由= self._read_status()
ファイル「は/ usrを/開始します_read_statusの行308、
行= str(self.fp.readline(_MAXLINE + 1)、 "iso-8859-1")
ファイル "/ usr/lib/python3.2/http/client.py" readinto
戻りself._sock.recv_into内のlib/python3.2/socket.py」、ライン276は、(b)は
socket.timeout:主要な茶がありました

タイムアウトになりましたPython 3でurlliburllib2のモジュールをurllibに再編成したときのngeこれが原因で変化が起こった可能性はありますか?

+0

例外タイプを見つける簡単な方法は '例外としてe:print(type(e))' 。例外を再現できると仮定します。 – polvoazul

答えて

18

例外は、ソケットからのタイムアウトであるので、

from socket import timeout 
try: 
    response = urllib.request.urlopen(url, timeout=10).read().decode('utf-8') 
except (HTTPError, URLError) as error: 
    logging.error('Data of %s not retrieved because %s\nURL: %s', name, error, url) 
except timeout: 
    logging.error('socket timed out - URL %s', url) 
else: 
    logging.info('Access successful.') 

は、新しい例外をキャッチする必要があります。あなたの質問が何であるかわからないので、私はあなたの質問に答えるかどうか分かりませんが、

関連する問題