私はpythonを勉強しようとしていて、サーバーのタイムアウトエラーをキャッチして(インターネット接続が中断された場合など)、プロセスをX秒間停止させるタイマーを追加したいと思っていました(以下のコードでは2 秒) その後、もう一度プロセスを続行してみてください。私の論理は正しいと思いますが (間違っている場合は訂正してください)、次のようなエラーが表示されます。
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Python33\lib\threading.py", line 639, in _bootstrap_inner
self.run()
File "C:\Python33\lib\threading.py", line 825, in run
self.function(*self.args, **self.kwargs)
TypeError: 'NoneType' object is not callable
タイマーがトリガーされてエラーになったように見える理由がよくわかりません。これが私のコードです:
import urllib.request
from threading import Timer
req = urllib.request.Request('http://www.nowebsitecontainsthisaddress.com')
def ServerTimeOut(e):
timer_rest = Timer(2.0, print('Time Out Error:'))
timer_rest.start()
print (e.reason)
while timer_rest.is_alive():
pass
while True:
try:
url = urllib.request.urlopen(req)
break
except urllib.error.HTTPError as e:
ServerTimeOut(e)
req = urllib.request.Request('http://www.google.com')
except urllib.error.URLError as e:
ServerTimeOut(e)
req = urllib.request.Request('http://www.google.com')
使用OSはwindows7です
更新: こんにちは。コードをこれに微調整してみましたが、エラーは返されなくなりました。エラーが発生した理由について誰かが私に教えてくれることを願っています..ありがとう^^、
import urllib.request
from threading import Timer
req = urllib.request.Request('http://www.nowebsitecontainsthisaddress.com')
def printMessage():
print('Time Out Error:')
def ServerTimeOut(e):
timer_rest = Timer(2.0, printMessage)
timer_rest.start()
print (e.reason)
while timer_rest.is_alive():
pass
while True:
try:
url = urllib.request.urlopen(req)
break
except urllib.error.HTTPError as e:
ServerTimeOut(e)
req = urllib.request.Request('http://www.google.com')
except urllib.error.URLError as e:
ServerTimeOut(e)
req = urllib.request.Request('http://www.google.com')