No se puede detectar la excepción simulada porque no hereda BaseException

Estoy trabajando en un proyecto que implica conectarse a un servidor remoto, esperar una respuesta y luego realizar acciones basadas en esa respuesta. Capturamos un par de excepciones diferentes y nos comportamos de manera diferente según la excepción que se detecte. Por ejemplo:

def myMethod(address, timeout=20):
    try:
        response = requests.head(address, timeout=timeout)
    except requests.exceptions.Timeout:
        # do something special
    except requests.exceptions.ConnectionError:
        # do something special
    except requests.exceptions.HTTPError:
        # do something special
    else:
        if response.status_code != requests.codes.ok:
            # do something special
        return successfulConnection.SUCCESS

Para probar esto, hemos escrito una prueba como la siguiente

class TestMyMethod(unittest.TestCase):

    def test_good_connection(self):
        config = {
            'head.return_value': type('MockResponse', (), {'status_code': requests.codes.ok}),
            'codes.ok': requests.codes.ok
        }
        with mock.patch('path.to.my.package.requests', **config):
            self.assertEqual(
                mypackage.myMethod('some_address',
                mypackage.successfulConnection.SUCCESS
            )

    def test_bad_connection(self):
        config = {
            'head.side_effect': requests.exceptions.ConnectionError,
            'requests.exceptions.ConnectionError': requests.exceptions.ConnectionError
        }
        with mock.patch('path.to.my.package.requests', **config):
            self.assertEqual(
                mypackage.myMethod('some_address',
                mypackage.successfulConnection.FAILURE
            )

Si ejecuto la función directamente, todo sucede como se esperaba. Incluso probé agregandoraise requests.exceptions.ConnectionError altry cláusula de la función. Pero cuando ejecuto mis pruebas unitarias, obtengo

ERROR: test_bad_connection (test.test_file.TestMyMethod)
----------------------------------------------------------------
Traceback (most recent call last):
  File "path/to/sourcefile", line ###, in myMethod
    respone = requests.head(address, timeout=timeout)
  File "path/to/unittest/mock", line 846, in __call__
    return _mock_self.mock_call(*args, **kwargs)
  File "path/to/unittest/mock", line 901, in _mock_call
    raise effect
my.package.requests.exceptions.ConnectionError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "Path/to/my/test", line ##, in test_bad_connection
    mypackage.myMethod('some_address',
  File "Path/to/package", line ##, in myMethod
    except requests.exceptions.ConnectionError:
TypeError: catching classes that do not inherit from BaseException is not allowed

Traté de cambiar la excepción a la que estaba parcheandoBaseException y obtuve un error más o menos idéntico.

he leídohttps://stackoverflow.com/a/18163759/3076272 ya, así que creo que debe ser malo__del__ enganchar en algún lado, pero no estoy seguro de dónde buscarlo o qué puedo hacer mientras tanto. También soy relativamente nuevo enunittest.mock.patch() así que es muy posible que también esté haciendo algo mal allí.

Este es un complemento de Fusion360, por lo que utiliza la versión empaquetada de Python 3.3 de Fusion 360, por lo que sé, es una versión de vainilla (es decir, no ruedan la suya), pero no estoy seguro de eso.