Oi, Esdras, como vai?
Seu código está funcionando corretamente e resolve o exercício proposto. Você implementou uma solução que vai além do esperado, utilizando funções, tratamento de exceções com try/except e até o bloco finally. A validação dos valores negativos está adequada, e o programa consegue lidar tanto com números negativos quanto com entradas inválidas.
Parabéns por buscar aplicar conceitos mais avançados e por compartilhar sua solução.
Continue praticando e trazendo suas dúvidas, o fórum está à disposição.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!