Pular para o conteúdo principal
O AppSignal tenta registrar o maior número possível de exceções Python. O AppSignal consegue capturar exceções em toda a sua aplicação com nossas instrumentações que estendem nosso suporte a muitos frameworks e pacotes populares de jobs em background. No entanto, pode haver cenários em que exceções são levantadas que não estão relacionadas a problemas potenciais na sua aplicação Python, como bots tentando postar formulários automaticamente ou links desatualizados que podem direcionar visitantes para conteúdo que não existe mais. Para evitar que esses erros sejam levantados como problemas no AppSignal, é possível adicionar tratamento de exceções ao seu código ou até mesmo permitir que o AppSignal ignore completamente certos erros.

Ignorar erros

A configuração do AppSignal permite ignorar erros. Fornecendo uma lista de erros específicos, o AppSignal não enviará alertas quando esses erros forem levantados.

Tratamento de exceções

Simplesmente ignorar um erro silenciará as notificações, mas pode potencialmente esconder um problema maior. Por essa razão, recomendamos que você adicione tratamento de exceções com instruções try ... except à sua aplicação. Usando try ... except, você pode capturar exceções específicas e adicionar um caminho de código alternativo para quando uma exceção ocorre, como renderizar páginas 404 ou fornecer ao usuário mensagens de erro mais detalhadas sobre o que deu errado. Por exemplo, em um arquivo de view do Django podemos fazer o seguinte:
def show(request):
   try:
        user = Post.find(1)
    except RecordNotFound:
        return render(request, "not_found.html")
Existem alguns cenários, como quando recursos não existem ou quando o envio de um formulário falha, que devem ser tratados dessa forma para fornecer respostas HTTP adequadas ao usuário final. Se você quiser reportar esses erros capturados ao AppSignal, use os helpers set_error ou send_error.

set_error

Reporta erros sem que eles causem o crash da sua aplicação. Usando o helper set_error, o erro fornecido é definido no trace do AppSignal, que reporta o erro no trace (requisição / job em background) ao AppSignal. Se você ainda quiser rastrear o erro enquanto o captura, pode usar o helper set_error para adicionar a exceção ao trace atual do AppSignal. O erro será registrado no AppSignal, mas seu processo não irá travar. Por exemplo, em um arquivo de view do Django podemos fazer o seguinte:
from appsignal import set_error

# In a Django view file
def show(request):
    try:
        user = Post.find(1)
    except Post.DoesNotExist as error:
        set_error(error)
        return render(request, "not_found.html")
A exceção será rastreada pelo AppSignal como qualquer outro erro, e permite que você forneça tratamento de erros personalizado e fallbacks.
Nota: Este método só funciona quando já existe um trace do AppSignal ativo. Caso contrário, o erro será ignorado. Isso é verdade na maioria das instrumentações suportadas automaticamente ou ao usar instrumentação personalizada. Consulte send_error para enviar erros sem um trace do AppSignal ativo.

send_error

O AppSignal fornece um mecanismo para enviar erros ao AppSignal sem precisar iniciar um trace. Isso é útil para rastrear erros que ocorrem em código que não está em um contexto de requisição web ou job em background, como scripts pontuais ou cron jobs. Isso é útil para apps que não usam nossas instrumentações para esta parte do app onde o erro é levantado. Você pode usar o método send_error para enviar diretamente uma exceção ao AppSignal de qualquer lugar do seu código sem precisar iniciar um trace primeiro.
from appsignal import send_error

# In a script
def perform():
    try:
        user = Post.find(1)
    except Post.DoesNotExist as error:
        send_error(error)
        print("No post found!")

Metadados adicionais

Para adicionar metadados ao erro enviado, use o método send_error_with_context. Tags e outros tipos de personalização de dados podem ser adicionados ao erro dessa forma.
from appsignal import send_error_with_context, set_params

# In a script
def perform():
    try:
        user = Post.find(1)
    except Post.DoesNotExist as error:
        # Using implicit current span
        with send_error_with_context(error):
            set_params({"abc": "def"})

        # Using explicit `with` block span
        with send_error_with_context(error) as current_span:
            set_params({"abc": "def"}, current_span)

        print("No post found!")