我正在努力尝试,除了 python 3
我可以捕获 HTTPError(Bad Request) 和 URLError(no host/route name found)
但是我还没有捕捉到超时错误。
while True:
try:
f = urllib.request.urlretrieve(url,csvname)
except urllib.error.HTTPError as e: #
print(str(chl) + " Error:" + str(e))
continue
except urllib.error.URLError as e:
continue
except socket.timeout as e:
#I can't catch time out error here
continue
Run Code Online (Sandbox Code Playgroud)
它返回这个。
如何防止脚本因超时错误而停止?
Traceback (most recent call last):
File "wisdom2.py", line 84, in <module>
f = urllib.request.urlretrieve(url,csvname)
File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 186, in urlretrieve
with contextlib.closing(urlopen(url, data)) as fp:
File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 161, in urlopen
return opener.open(url, data, timeout)
File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 464, in open
response = self._open(req, data)
File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 482, in _open
'_open', req)
File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 442, in _call_chain
result = func(*args)
File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 1211, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 1186, in do_open
r = h.getresponse()
File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/http/client.py", line 1227, in getresponse
response.begin()
File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/http/client.py", line 386, in begin
version, status, reason = self._read_status()
File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/http/client.py", line 348, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/socket.py", line 378, in readinto
return self._sock.recv_into(b)
TimeoutError: [Errno 60] Operation timed out
except socket.timeout as e:
NameError: name 'socket' is not defined
Run Code Online (Sandbox Code Playgroud)
在 python 3.x 上,TimeoutError是一个内置异常类。你可以抓住它
except TimeoutError:
...
Run Code Online (Sandbox Code Playgroud)
在 python 2.x 上,您有两个选择:
捕捉urllib.socket.timeout异常
捕捉requests.Timeout异常
| 归档时间: |
|
| 查看次数: |
4439 次 |
| 最近记录: |