Oi, Vinicius, como vai?
Seu código atendeu muito bem à proposta da atividade. A validação para impedir números negativos ficou correta e o tratamento com try e except ajudou a deixar a aplicação mais segura contra entradas inválidas. A organização em funções também deixou a leitura mais clara.
O uso do match case no menu foi uma boa escolha e mostrou iniciativa em utilizar recursos mais recentes do Python. Além disso, o loop para repetir a execução até uma entrada válida trouxe uma experiência mais consistente para quem utiliza o programa.
Como evolução do exercício, você já pensou em permitir que a pessoa escolha cadastrar vários projetos diferentes sem precisar reiniciar o programa?
Parabéns pela atividade e obrigado por compartilhar sua solução no fórum. Continue praticando e explorando novas possibilidades no Python, o fórum segue à disposição para ajudar no seu aprendizado.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!