Criando exceções customizadas
Python oferece um conjunto robusto de exceções nativas como ValueError, TypeError, KeyError e RuntimeError. No entanto, em aplicações complexas, essas exceções genéricas não são suficientes para expressar nuances do domínio do problema. Por exemplo, um ValueError pode ser lançado por diversos motivos em diferentes partes do sistema, tornando difícil identificar a causa raiz apenas pelo tipo da exceção.