Retornando o código de erro para o main então chamar sys.exit.
Usando testes unitários.

Eu nunca tive o costume de colocar testes junto com o código da
aplicação. Normalmente eu criava testes em outro lugar e depois eu
implementava o código na aplicação.