1
resposta

Retornar exception customizada com dados adicionais

Estou desenvolvendo um projeto que tem um cliente mobile, que se comunica por meio de ApiRest com o backend em Django. Foi solicitado pelo desenvolvedor que eu retorne os erros contendo mais informações além do tipo do erro, como por exemplo o arquivo que ocorreu o erro, a linha, o método e a classe, daí pensei em adicionar no retorno um dicionário, contendo os dados solicitados.

Eu estou fazendo da seguinte forma:

class CustomException(Exception):
    def __init__(self, error_file, error_method, error_line, error_message, *args):
        data = {
            "error_file": error_file,
            "error_line": error_line,
            "error_method": error_method
        }
        args += (data, error_message)
        super(CustomException, self).__init__(*args)

O retorno quando levanto a exception está assim:

{
  "code": "500",
  "error": "gerar_pix",
  "error_description": "(
       {'error_file': 'arquivo_xpto.py', 'error_line': 203, 'error_method': 'gerar_pix'}, 
       'Mensagem amigável de erro')"
}

Eu não queria o dicionário (data) no error_description eu gostaria de retornar assim:

{
  "code": "500",
  "error": "gerar_pix",
  "error_description": "Mensagem amigável de erro",
  "error_data": {
        'error_file': 'arquivo_xpto.py', 
        'error_line': 203,  
        'error_method': 'gerar_pix'
    }
}

É possível fazer isso, qual seria o caminho?

1 resposta
class CustomException(Exception):
    def __init__(self, error_file, error_method, error_line, error_message, *args):
        data = {
            "error_file": error_file,
            "error_line": error_line,
            "error_method": error_method
        }
            error_message['error_data'] = data
        args += (error_message)
        super(CustomException, self).__init__(*args)

Testa e informa o resultado, por gentileza.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software