Executando verificação de segurança...
1

[DÚVIDA] Tratamento de erros - Boas práticas e tratamento de custom errors

Opa pessoal. Bão?

Estou ingressando um pouco mais a fundo nos estudos de programação e finalmente estou começando a pegar o hábito de sempre tratar possíveis erros com try/catch (no meu caso, em Python, mas a discussão serve para qualquer linguagem).

Em um dos códigos teste que fiz para testar se estava entendendo o fluxo das coisas, fiquei com uma dúvida e não consegui colocar em palavras para pesquisar no Google.

Tratamento de erros - GERAL

Bom, minha dúvida é a seguinte, qual dos dois modelos de código a seguir segue melhor as boas práticas?

Modo 1

def tenta_abrir_arquivo(nome_do_arquivo):
    try:
        f = open(nome_do_arquivo)
    except Exception as e:
        print(e)
        print(f'O arquivo {nome_do_arquivo} não existe!')
    else:
        print(f'Parabéns! O arquivo {nome_do_arquivo} existe! ')

if __name__=='__main__':

    possiveis_nomes = ['teste1.txt', 'teste2.txt', 'nome_correto.txt']

    for possivel_nome in possiveis_nomes:
        tenta_abrir_arquivo(possivel_nome)

Modo 2

def tenta_abrir_arquivo(nome_do_arquivo):
    f = open(nome_do_arquivo)

if __name__=='__main__':

    possiveis_nomes = ['teste1.txt', 'teste2.txt', 'nome_correto.txt']

    for possivel_nome in possiveis_nomes:
        try:
            tenta_abrir_arquivo(possivel_nome)
        except Exception as e:
            print(e)
            print(f'O arquivo {possivel_nome} não existe!')
        else:
            print(f'Parabéns! O arquivo {possivel_nome} existe! ')

No fim das contas, já que ambos os códigos geram o mesmo resultado, a dúvida seria se deve-se tratar os erros dentro da definição da função ou quando vou chamar a função. Isso pode fazer alguma diferença prática ou é apenas uma questão de boas práticas?

Tratamento de erros - Custom errors

Aproveitando a abertura do tópico, essa semana no trabalho (tentando aplicar essas práticas de sempre tratar possíveis erros), me deparei com algo diferente.

Ao utilizar a API do Ad Manager, em um dos momentos eu recebi erros personalizáveis (erros criados pela própria API) e fiquei com dúvida de como fazer um tratamento adequado e que me fornece um um bom log de erro. Existe alguma dica para isso?.

Por exemplo, nos exemplos citados acima, é possível tratar possíveis erros específicos, exemplo (utilizando modelo 1):

def tenta_abrir_arquivo(nome_do_arquivo):
    try:
        f = open(nome_do_arquivo)
    excpect FileNotFoundError:
        print(e)
        print(f'O arquivo {nome_do_arquivo} não existe!')
    except Exception as e:
        print(e)
        print('Ocorreu algum erro!')
    else:
        print(f'Parabéns! O arquivo {nome_do_arquivo} existe! ')

if __name__=='__main__':

    possiveis_nomes = ['teste1.txt', 'teste2.txt', 'nome_correto.txt']

    for possivel_nome in possiveis_nomes:
        tenta_abrir_arquivo(possivel_nome)

Como isso funciona nesses casos de erros de API? Por exemplo, como eu procederia (após já ter feito todos os imports necessários) para tratar um erro como esse e gerar uma log do tipo 'Erro do tipo: ForecastError'? Vocês tem alguma dica/vídeo/sugestão de boa prática?

Valeuuuu

Carregando publicação patrocinada...
2

Opa, Victor! Eu editei a sua publicação para colocar o código dentro de um bloco de código python e deixar o código mais legível. Você pode editar a publicação para saber como eu fiz isso.

Bom, minha dúvida é a seguinte, qual dos dois modelos de código a seguir segue melhor as boas práticas?

Sobre essa questão, eu optaria pelo Modo 1, porque se você fosse usar essa função em outro lugar você não precisaria colocar o código de tratamento de erro novamente, esse é o conceito de usar funções. 👍

1