try-except с игнорированием ошибок в процессе

Вопрос синтаксический – как игнорировать ошибки возникшее внутри ошибки (допустим ConnectionError).

Пример кода:

try:
    ...
except ConnectionError as err:
    print(err)

Внутри ConnectionError так же может возникнуть ошибка (в моем случае возникает), но основная проблема в данном примере - ConnectionError. Соотвественно возникшие ошибки внутри можно игнорировать. Как это сделать?

Когда-то знал решение, но позабыл. Гугл тоже не подсказал. Вроде, раньше указывал так: except ConnectionError from None as err:

Однако, питон этого не понимает...


Предоставляю пример ошибки:

Traceback (most recent call last):
  File "/venv/lib/python3.7/site-packages/urllib3/connection.py", line 157, in _new_conn
    (self._dns_host, self.port), self.timeout, **extra_kw
  File "/venv/lib/python3.7/site-packages/urllib3/util/connection.py", line 61, in create_connection
    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/socket.py", line 748, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 8] nodename nor servname provided, or not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/venv/lib/python3.7/site-packages/urllib3/connectionpool.py", line 672, in urlopen
    chunked=chunked,
  File "/venv/lib/python3.7/site-packages/urllib3/connectionpool.py", line 376, in _make_request
    self._validate_conn(conn)
  File "/venv/lib/python3.7/site-packages/urllib3/connectionpool.py", line 994, in _validate_conn
    conn.connect()
  File "/venv/lib/python3.7/site-packages/urllib3/connection.py", line 300, in connect
    conn = self._new_conn()
  File "/venv/lib/python3.7/site-packages/urllib3/connection.py", line 169, in _new_conn
    self, "Failed to establish a new connection: %s" % e
urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x10fc5d3c8>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/venv/lib/python3.7/site-packages/requests/adapters.py", line 449, in send
    timeout=timeout
  File "/venv/lib/python3.7/site-packages/urllib3/connectionpool.py", line 720, in urlopen
    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
  File "/venv/lib/python3.7/site-packages/urllib3/util/retry.py", line 436, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.sec.org', port=443): Max retries exceeded with url: /botJG6Xd3Kpm8NNlF74JG6Xd3Kpm8NNlF74JG6Xd3Kpm8NNlF74/sendMessage?chat_id=707444176&text=%D0%92%D0%B0%D0%BB%D0%B8%D0%B4%D0%B0%D1%86%D0%B8%D1%8F...+1 (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x10fc5d3c8>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/threading.py", line 917, in _bootstrap_inner
    self.run()
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "/app/sec.py", line 44, in _send_messages_from_thread
    if self._send_message(message_obj.chat_id, message_obj.message):
  File "/app/sec.py", line 38, in _send_message
    self._bot.send_message(chat_id, message)
  File "/venv/lib/python3.7/site-packages/secbot/__init__.py", line 601, in send_message
    reply_markup, parse_mode, disable_notification, timeout))
  File "/venv/lib/python3.7/site-packages/secbot/apihelper.py", line 154, in send_message
    return _make_request(token, method_url, params=payload, method='post')
  File "/venv/lib/python3.7/site-packages/secbot/apihelper.py", line 58, in _make_request
    timeout=(connect_timeout, read_timeout), proxies=proxy)
  File "/venv/lib/python3.7/site-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/venv/lib/python3.7/site-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/venv/lib/python3.7/site-packages/requests/adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.sec.org', port=443): Max retries exceeded with url: /botJG6Xd3Kpm8NNlF74JG6Xd3Kpm8NNlF74JG6Xd3Kpm8NNlF74/sendMessage?chat_id=987898976...+1 (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x10fc5d3c8>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'))



Ответы (3 шт):

Автор решения: gohxr
try:
    ...
except ConnectionError as err:
    raise Exception(err) from None
→ Ссылка
Автор решения: Xander

Если ошибка возникает внутри блока except, то там можно использовать вложенную обработку исключений:

try:
    ...
except ConnectionError as err:

    try:
        do_something(err)
    except:
        print('Ошибка при обработке ошибки!!!')

Но вообще, по возможности лучше проектировать код так, чтобы внутри блоков except были небольшие максимально безопасные кусочки кода.

→ Ссылка
Автор решения: Victor Linda

Необходимо вложить блоки обработки exception один в другой, если необходимо их все обработать

   try:
        try:
           ...
        except ConnectionError:
            pass
    except urllib3.exceptions.NewConnectionError:
        pass
    else:
        print('OK')
→ Ссылка