code: def exception_handler(exc, context):
      
      if isinstance(exc, exceptions.APIException):
          headers = {}
          if getattr(exc, 'auth_header', None):
              headers['WWW-Authenticate'] = exc.auth_header
          if getattr(exc, 'wait', None):
              headers['Retry-After'] = '%d' % exc.wait
  
          if isinstance(exc.detail, (list, dict)):
              data = exc.detail
          else:
              data = {'message': exc.detail}
  
          set_rollback()
          return Response(data, status=exc.status_code, headers=headers)
  
      elif isinstance(exc, Http404):
          msg = _('Not found.')
          data = {'message': six.text_type(msg)}
  
          set_rollback()
          return Response(data, status=status.HTTP_404_NOT_FOUND)
  
      elif isinstance(exc, PermissionDenied):
          msg = _('Permission denied.')
          data = {'message': six.text_type(msg)}
  
          set_rollback()
          return Response(data, status=status.HTTP_403_FORBIDDEN)
  
      # Note: Unhandled exceptions will raise a 500 error.
      return None
docs: Returns the response that should be used for any given exception.
  
      By default we handle the REST framework `APIException`, and also
      Django's built-in `Http404` and `PermissionDenied` exceptions.
  
      Any unhandled exceptions may return `None`, which will cause a 500 error
      to be raised.