The exception will be caught in order of “except” clauses, but beware of the subclass tree, since a except will catch all subclasses as well. For instance, this one leads to unreachable code.
try: # do something except BaseException: # do something with except DerivedException: # assuming DerivedException is an extension of BaseException, you can't reach that code
So put them in most specific first.
In your Azure situation, this brings to something like:
from azure.core.exceptions import ( ClientAuthenticationError, HttpResponseError, ServiceRequestError, ResourceNotFoundError, AzureError ) try: # do KV stuff except ClientAuthenticationError: # Can occur if either tenant_id, client_id or client_secret is incorrect logger.critical("Azure SDK was not able to connect to Key Vault", e) except HttpResponseError: # One reason is when Key Vault Name is incorrect logger.critical("Possible wrong Vault name given", e) except ServiceRequestError: # Network error, I will let it raise to higher level raise except ResourceNotFoundError: # Let's assume it's not big deal here, just let it go pass except AzureError as e: # Will catch everything that is from Azure SDK, but not the two previous logger.critical("Azure SDK was not able to deal with my query", e) raise except Exception as e: # Anything else that is not Azure related (network, stdlib, etc.) logger.critical("Unknown error I can't blame Azure for", e) raise
CLICK HERE to find out more related problems solutions.