code: def process_exception(e):
      """
      Translate errors to Metaflow errors for standardized messaging. The intent is that all
      Azure Blob Storage integration logic should send errors to this function for
      translation.
  
      We explicitly EXCLUDE executor related errors here.  See handle_executor_exceptions
      """
      if isinstance(e, MetaflowException):
          # If it's already a MetaflowException... no translation needed
          raise
      if isinstance(e, ImportError):
          # Surprise ImportError here... (expected to see this handled and wrapped as MetaflowAzurePackagingError)
          # Reraise it raw for visibility, it's a bug and is catastrophic anyway.
          raise
  
      from azure.core.exceptions import (
          ClientAuthenticationError,
          ResourceNotFoundError,
          ResourceExistsError,
          AzureError,
      )
  
      if isinstance(e, ClientAuthenticationError):
          # Final line shows the TLDR
          # Note we assume the str(e) is never empty string (otherwise, IndexError)
          raise MetaflowAzureAuthenticationError(
              msg=str(e).splitlines()[-1]
          )
      elif isinstance(e, (ResourceNotFoundError, ResourceExistsError)):
          raise MetaflowAzureResourceError(msg=str(e))
      elif isinstance(
          e, AzureError
      ):  # this is the base class for all Azure SDK errors
          raise MetaflowInternalError(msg="Azure error: %s" % (str(e)))
      else:
          raise MetaflowInternalError(msg=str(e))
  
file_path: metaflow/metaflow/plugins/azure/azure_utils.py
imports: import sys
  import time
  from metaflow.plugins.azure.azure_exceptions import MetaflowAzureAuthenticationError, MetaflowAzureResourceError, MetaflowAzurePackageError
  from metaflow.exception import MetaflowInternalError, MetaflowException
label_desc: Use image node_id 4 for calling a global function with example usage: process_exception(e) without return types