Novo post no blog đ
VocĂȘ provavelmente jĂĄ escreveu o mesmo try/finally dezenas de vezes para fechar conexĂŁo, liberar lock, limpar recurso. Funciona. Mas quando a lĂłgica de encerramento muda, vocĂȘ caça essa duplicação pelo projeto inteiro.
O artigo mostra como criar context managers prĂłprios â com __enter__/__exit__ e com @contextmanager â e trĂȘs padrĂ”es que resolvem isso em produção.
VocĂȘ provavelmente nĂŁo precisa desse try/finally
Existe um padrĂŁo que aparece em quase todo projeto Python com mais de algumas semanas de vida. Ele tem variaçÔes, mas o esqueleto Ă© sempre o mesmo: 1 2 3 4 5 6 conn = get_db_connection() try: resultado = conn.execute(query) return resultado finally: conn.close() Funciona. Fecha a conexĂŁo mesmo se der exceção. NinguĂ©m vai questionar em code review. O problema Ă© que esse bloco vai se repetir em todo lugar que precisar de uma conexĂŁo â e quando a lĂłgica de encerramento mudar (adicionar log, mĂ©tricas, rollback), vocĂȘ vai caçar essa duplicação pelo projeto inteiro.
