atexit registra funções executadas quando o interpretador termina normalmente. Ele serve para limpeza pequena e local, como remover um marcador temporário ou emitir uma última métrica.

Exemplo prático

import atexit
from pathlib import Path

temporary = Path("job.lock")
temporary.touch()

@atexit.register
def remove_lock() -> None:
    temporary.unlink(missing_ok=True)
    print("lock removed")

Ordem e argumentos

As funções rodam na ordem inversa ao registro. register() também aceita argumentos, mas uma função curta, sem dependências frágeis, é mais previsível durante o desligamento.

O que não delegar ao handler

Não confie nele como única forma de salvar dados importantes. O processo pode receber SIGKILL, sofrer uma falha fatal ou ser interrompido antes da conclusão. Grave progresso de forma atômica durante o trabalho.

Context manager primeiro

Quando um recurso tem escopo claro, with fecha arquivos, conexões e locks no ponto correto, inclusive diante de exceções. Reserve atexit para recursos ligados à vida inteira do processo.

Continue estudando

Aprofunde a base com tratamento de erros em Python. A documentação oficial do Python, consultada em 22 de julho de 2026, detalha a API, as limitações e as diferenças entre versões.