Python: Levantando Exceções

PythonBeginner
Pratique Agora

Introdução

Bem-vindo à Arcane Academy of Exceptional Coding — uma instituição prestigiosa onde apenas os magos de codificação mais capazes se reúnem para aprimorar sua arte. Você é um jovem mago que recentemente se juntou à academia e ao sempre desafiador mundo dos algoritmos mágicos e das complexas incantações.

Sua jornada começa sob a orientação do Mestre Pytho, um renomado Treinador de Lançamento de Feitiços Competitivo conhecido em todos os reinos mágicos por suas excepcionais habilidades de resolução de problemas e vasto conhecimento da feitiçaria Pythonic. Na academia, todo mago deve aprender a arte de lançar feitiços, mas o que torna um mago verdadeiramente poderoso é a capacidade de antecipar e gerenciar o inesperado.

Hoje, o Mestre Pytho ensinará a você a antiga arte de Levantar Exceções (Raising Exceptions) — uma habilidade fundamental para qualquer aspirante a mago que lhe permite controlar o fluxo da magia (código) e criar mecanismos de segurança contra erros imprevistos que podem surgir durante o lançamento de feitiços (programação).

O objetivo deste Lab é capacitá-lo a escrever código Python robusto que possa lidar e levantar exceções adequadamente, garantindo que seus feitiços (programas) não sejam apenas potentes, mas também resilientes e seguros. Prepare-se, pois você está prestes a embarcar em uma jornada encantada pelo mundo arcano do Python Raising Exceptions!

Entendendo os Fundamentos das Exceções

Nesta etapa, você aprenderá sobre os fundamentos das exceções em Python. Uma exceção em Python é como um evento não planejado que interrompe o fluxo de uma sequência de lançamento de feitiços. Quando o Python encontra um erro, ele interrompe o processo atual e o passa pela pilha de chamadas (call stack) até que seja tratado. Se não for tratado, o feitiço (programa) trava e o Python imprime uma mensagem de erro.

Para simular um cenário onde uma exceção pode ocorrer, você criará um script Python simples que tenta lançar um feitiço (executar uma divisão) que dá errado.

Abra um arquivo chamado spellcasting.py no diretório ~/project com o seguinte conteúdo:

## spellcasting.py

def divide_potions(potions, wizards):
    return potions / wizards

## An attempt to divide potions among zero wizards, which will raise an exception.
divide_potions(10, 0)

Execute seu script de lançamento de feitiços usando o comando:

python3 ~/project/spellcasting.py

Você notará que o Python levanta um ZeroDivisionError. Na próxima etapa, você aprenderá como lidar adequadamente com essa exceção:

Traceback (most recent call last):
  File "/home/labex/project/spellcasting.py", line 7, in <module>
    divide_potions(10, 0)
  File "/home/labex/project/spellcasting.py", line 4, in divide_potions
    return potions / wizards
ZeroDivisionError: division by zero

Levantando Exceções Personalizadas

É hora de passar para uma técnica de lançamento de feitiços mais avançada — levantar suas próprias exceções. Isso permite que você crie e use mensagens de erro personalizadas, tornando seus feitiços mais flexíveis e controlados.

Nesta etapa, você modificará o script spellcasting.py para levantar uma Exception personalizada quando um número incorreto de magos for passado para a função divide_potions.

Primeiro, modifique a função divid_potions em spellcasting.py de acordo:

## spellcasting.py

def divide_potions(potions, wizards):
    if wizards == 0:
        raise Exception("Cannot divide potions among zero wizards!")
    return potions / wizards

## Try to divide potions again with intentional error.
divide_potions(20, 0)

Após salvar as alterações, execute seu script modificado novamente:

python3 ~/project/spellcasting.py

Desta vez, o Python levantará a mensagem de Exception personalizada:

Traceback (most recent call last):
  File "/home/labex/project/spellcasting.py", line 7, in <module>
    divide_potions(20, 0)
  File "/home/labex/project/spellcasting.py", line 3, in divide_potions
    raise Exception("Cannot divide potions among zero wizards!")
Exception: Cannot divide potions among zero wizards!

Tratamento de Exceções com Try-Except

Nesta etapa, você aprenderá como tratar exceções de forma elegante usando o bloco try-except. Garantir que seu feitiço (programa) possa se recuperar de erros é uma habilidade crítica para um mago.

Adicione o bloco try-except em torno da chamada da função divide_potions no script spellcasting.py:

## spellcasting.py

def divide_potions(potions, wizards):
    if wizards == 0:
        raise Exception("Cannot divide potions among zero wizards!")
    return potions / wizards

try:
    ## Try to divide potions and handle potential errors.
    result = divide_potions(30, 0)
    print(f"Each wizard receives {result} potions.")
except Exception as e:
    print(f"Spell failed: {e}")

Execute isso no shell:

python3 ~/project/spellcasting.py

Agora, quando você executar o script, em vez de travar, ele imprimirá a saída:

Spell failed: Cannot divide potions among zero wizards!

Resumo

Neste laboratório, aventuramo-nos pelas terras encantadoras de Python Raising Exceptions (Levantando Exceções). Começamos com uma introdução às exceções, permitindo que uma ocorresse naturalmente, depois aprendemos a criar nossas próprias exceções e mensagens e, finalmente, concluímos com a arte de lidar com essas exceções sem quebrar nosso feitiço (programa).

Você agora dominou os fundamentos de levantar e tratar exceções em Python, uma habilidade que, sem dúvida, o servirá bem em sua jornada como um mago da codificação. Isso não apenas contribui para a robustez e a facilidade de uso de seus programas, mas também ensina você a prever e se preparar para comportamentos inesperados — mantendo seus feitiços à prova de falhas e sua proeza como mago formidável.

Que o código esteja com você, jovem feiticeiro.