[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