私はPythonライブラリーurllib
を使用してアプリケーションを開発していますが、URLにアクセスできないために例外が発生することがあります。ライブラリーコードではなく私の例外で停止
ただし、例外が標準ライブラリスタックにはほぼ6つのレベルを上げている:私はそれを調べることができ例外がある場合には、私は通常、%pdb
魔法でipython3
でコードを実行
/home/user/Workspace/application/main.py in call(path)
11 headers={'content-type': 'application/json'},
12 data=b'')
---> 13 resp = urllib.request.urlopen(req) ####### THIS IS MY CODE
14 return json.loads(resp.read().decode('utf-8'))
/usr/lib/python3.4/urllib/request.py in urlopen(url, data, timeout, cafile, capath, cadefault, context)
159 else:
160 opener = _opener
--> 161 return opener.open(url, data, timeout)
162
163 def install_opener(opener):
/usr/lib/python3.4/urllib/request.py in open(self, fullurl, data, timeout)
461 req = meth(req)
462
--> 463 response = self._open(req, data)
464
465 # post-process response
/usr/lib/python3.4/urllib/request.py in _open(self, req, data)
479 protocol = req.type
480 result = self._call_chain(self.handle_open, protocol, protocol +
--> 481 '_open', req)
482 if result:
483 return result
/usr/lib/python3.4/urllib/request.py in _call_chain(self, chain, kind, meth_name, *args)
439 for handler in handlers:
440 func = getattr(handler, meth_name)
--> 441 result = func(*args)
442 if result is not None:
443 return result
/usr/lib/python3.4/urllib/request.py in http_open(self, req)
1208
1209 def http_open(self, req):
-> 1210 return self.do_open(http.client.HTTPConnection, req)
1211
1212 http_request = AbstractHTTPHandler.do_request_
/usr/lib/python3.4/urllib/request.py in do_open(self, http_class, req, **http_conn_args)
1182 h.request(req.get_method(), req.selector, req.data, headers)
1183 except OSError as err: # timeout error
-> 1184 raise URLError(err)
1185 r = h.getresponse()
1186 except:
URLError: <urlopen error [Errno 111] Connection refused>
はそうオンすぐに。しかし、このために私は自分のコードに到達するためにスタック6レベルに下がる必要があります。
私のアプリが自分のコードを直接指しているとクラッシュすることはありますか?
'なぜ例外の本当の原因を隠すのが役に立つのでしょうか?'それはライブラリのコードなので。私は、ライブラリが私のコードでそれを呼び出す場所まで例外を伝播すると期待しています。 – TheMeaningfulEngineer