Adendo às exceções em Python: Traceback

traceback-1_abertura

Algo que acabei esquecendo de comentar a respeito do tratamento de exceções em Python é justamente sobre como restaurar as informações de traceback de uma exceção que “desaparecem” quando esta é capturada em um bloco try-except e que contém informações importantes sobre o que ocorreu.

A informação não “desapareceu” e para exibi-la é necessário recorrer à função print_exc() do módulo traceback para imprimi-la. Pegando como exemplo o “municipios.py” da parte anterior para criar o “municipios_tb.py”.

#!/usr/bin/env python3
"""Exceções em Python - parte 3 (versão com traceback) """
# -*- coding: utf-8 -*-
from sys import argv, stderr
from traceback import print_exc

EXIBE_TRACEBACK = True
...

Além de carregar os módulos necessários aproveitei para criar a constante ‘EXIBE_TRACEBACK’, para poder mais ligar e desligar a exibição do traceback, e também uma pequena modificação para o except “saber” o que precisa ser feito.

    ...
    except ParseError as erro:
        # informa o erro e sai!
        if EXIBE_TRACEBACK:
            print_exc(file=stderr)
        print(erro)
        exit(1)
    ...

E assim, caso a variável ‘EXIBE_TRACEBACK’ contenha True, o conteúdo do traceback será enviado para a STDERR — mas poderia também ser enviado, por exemplo, para um um outro arquivo.

Até!

Anúncios