diff --git a/httpx/_client.py b/httpx/_client.py index 13cd933673..31b69d1cb3 100644 --- a/httpx/_client.py +++ b/httpx/_client.py @@ -1267,10 +1267,12 @@ def close(self) -> None: if self._state != ClientState.CLOSED: self._state = ClientState.CLOSED - self._transport.close() - for transport in self._mounts.values(): - if transport is not None: - transport.close() + try: + self._transport.close() + finally: + for transport in self._mounts.values(): + if transport is not None: + transport.close() def __enter__(self: T) -> T: if self._state != ClientState.UNOPENED: @@ -1298,10 +1300,12 @@ def __exit__( ) -> None: self._state = ClientState.CLOSED - self._transport.__exit__(exc_type, exc_value, traceback) - for transport in self._mounts.values(): - if transport is not None: - transport.__exit__(exc_type, exc_value, traceback) + try: + self._transport.__exit__(exc_type, exc_value, traceback) + finally: + for transport in self._mounts.values(): + if transport is not None: + transport.__exit__(exc_type, exc_value, traceback) class AsyncClient(BaseClient): @@ -1982,10 +1986,12 @@ async def aclose(self) -> None: if self._state != ClientState.CLOSED: self._state = ClientState.CLOSED - await self._transport.aclose() - for proxy in self._mounts.values(): - if proxy is not None: - await proxy.aclose() + try: + await self._transport.aclose() + finally: + for proxy in self._mounts.values(): + if proxy is not None: + await proxy.aclose() async def __aenter__(self: U) -> U: if self._state != ClientState.UNOPENED: @@ -2013,7 +2019,9 @@ async def __aexit__( ) -> None: self._state = ClientState.CLOSED - await self._transport.__aexit__(exc_type, exc_value, traceback) - for proxy in self._mounts.values(): - if proxy is not None: - await proxy.__aexit__(exc_type, exc_value, traceback) + try: + await self._transport.__aexit__(exc_type, exc_value, traceback) + finally: + for proxy in self._mounts.values(): + if proxy is not None: + await proxy.__aexit__(exc_type, exc_value, traceback)