Last active
April 13, 2021 18:17
-
-
Save marcelotournier/9dda84f7d9e8e8209be75f584a143923 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
u""" | |
tentar.py | |
autor: Marcelo Tournier | |
url: https://github.com/marcelotournier | |
objetivo: Minha abstração de um método "Try" | |
""" | |
from sys import exc_info | |
from datetime import datetime | |
def tentar(func, *args): | |
""" | |
Roda uma função dentro de uma "sandbox", retornando | |
um dicionário com metadados sobre a tentativa, assim como o | |
resultado do chamado da função na chave 'retorno' do mesmo dicionário. | |
Essa função é uma abstração para rodar jobs em ambientes assíncronos, quando | |
vc precisa que o sistema continue mesmo com erros, e precisa logar | |
exceções de modo conveniente. | |
Parâmetros: | |
func: Uma função definida em python | |
*args: Um iterável contendo os argumentos para a função func | |
Retorna: | |
Um dicionário com metadados a respeito da tentativa de rodar a função. | |
Exemplo: | |
>>> tentar(len, (1,2,3)) | |
[out] | |
{'timestamp': '2021-04-13 10:56:06.768881', | |
'metodo': <function len(obj, /)>, | |
'args': ((1, 2, 3),), | |
'resultado': 'SUCESSO', | |
'retorno': 3} | |
>>> tentar(int, "abc") | |
[out] | |
{'timestamp': '2021-04-13 10:51:32.519986', | |
'metodo': int, | |
'args': ('abc',), | |
'resultado': 'FALHA', | |
'retorno': ValueError("invalid literal for int() with base 10: 'abc'")} | |
""" | |
timestamp = datetime.now().__str__() | |
try: | |
tentativa = "SUCESSO" | |
resultado = func(*args) | |
except: | |
tentativa = "FALHA" | |
resultado = exc_info()[1] | |
return { | |
"timestamp": timestamp, | |
"metodo": func, | |
"args": args, | |
"resultado": tentativa, | |
"retorno": resultado | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment