diff --git a/monzo/httpio.py b/monzo/httpio.py index 1fd6b11..6ccb039 100644 --- a/monzo/httpio.py +++ b/monzo/httpio.py @@ -195,7 +195,8 @@ def _perform_request( with response as fh: content += fh.read().decode('utf-8') except HTTPError as error: - raise MONZO_ERROR_MAP[error.code]() from error + exception_cls = MONZO_ERROR_MAP.get(error.code, MonzoGeneralError) + raise exception_cls() from error return { 'code': response.code, 'headers': response.headers, diff --git a/tests/test_httpio_errors.py b/tests/test_httpio_errors.py new file mode 100644 index 0000000..3292221 --- /dev/null +++ b/tests/test_httpio_errors.py @@ -0,0 +1,15 @@ +from unittest.mock import patch +from urllib.error import HTTPError + +import pytest + +from monzo.exceptions import MonzoGeneralError +from monzo.httpio import HttpIO + + +def test_unknown_status_code_raises_monzogeneralerror(): + http = HttpIO('https://example.com') + error = HTTPError(url='https://example.com/test', code=418, msg='teapot', hdrs=None, fp=None) + with patch('monzo.httpio.urlopen', side_effect=error): + with pytest.raises(MonzoGeneralError): + http.get('/test')