Introdução
Neste laboratório, você aprenderá como verificar se uma exceção específica foi levantada em Python. O laboratório se concentra em entender diferentes tipos de exceções e como lidar com elas de forma eficaz.
Você explorará tipos de exceções comuns como TypeError, NameError, IndexError, KeyError, ValueError e FileNotFoundError através de exemplos práticos em um script Python. O laboratório o guiará na criação de um arquivo exceptions_demo.py e na adição de código que demonstra como cada tipo de exceção é levantado e capturado usando blocos try...except.
Aprenda sobre Tipos de Exceções
Nesta etapa, você aprenderá sobre diferentes tipos de exceções em Python. Exceções são eventos que interrompem o fluxo normal da execução de um programa. Entender os tipos de exceções é crucial para lidar com erros de forma eficaz.
Python possui muitas exceções embutidas, e você também pode criar as suas próprias. Aqui estão alguns tipos de exceções comuns:
TypeError: Levantada quando uma operação ou função é aplicada a um objeto de tipo inadequado.NameError: Levantada quando um nome não é encontrado no namespace local ou global.IndexError: Levantada quando um subscrito de sequência está fora do intervalo.KeyError: Levantada quando uma chave de dicionário não é encontrada.ValueError: Levantada quando uma operação ou função recebe um argumento que tem o tipo correto, mas um valor inadequado.FileNotFoundError: Levantada quando um arquivo ou diretório é solicitado, mas não pode ser encontrado.
Vamos explorar esses tipos de exceções com alguns exemplos. Criaremos um script Python chamado exceptions_demo.py no diretório ~/project usando o editor VS Code.
- Abra o VS Code.
- Crie um novo arquivo chamado
exceptions_demo.pyno diretório~/project. - Adicione o seguinte código ao arquivo
exceptions_demo.py:
## TypeError
try:
result = 1 + "a"
except TypeError as e:
print(f"TypeError: {e}")
## NameError
try:
print(undefined_variable)
except NameError as e:
print(f"NameError: {e}")
## IndexError
try:
my_list = [1, 2, 3]
print(my_list[5])
except IndexError as e:
print(f"IndexError: {e}")
## KeyError
try:
my_dict = {"a": 1, "b": 2}
print(my_dict["c"])
except KeyError as e:
print(f"KeyError: {e}")
## ValueError
try:
num = int("abc")
except ValueError as e:
print(f"ValueError: {e}")
## FileNotFoundError
try:
with open("nonexistent_file.txt", "r") as f:
content = f.read()
except FileNotFoundError as e:
print(f"FileNotFoundError: {e}")
Este script demonstra como diferentes tipos de exceções são levantados e capturados usando blocos try...except. Cada bloco try contém código que pode levantar uma exceção específica. Se a exceção ocorrer, o bloco except correspondente é executado.
Agora, vamos executar o script:
- Abra o terminal no VS Code.
- Navegue até o diretório
~/project:
cd ~/project
- Execute o script
exceptions_demo.pyusando o comando python:
python exceptions_demo.py
Você deve ver a seguinte saída:
TypeError: unsupported operand type(s) for +: 'int' and 'str'
NameError: name 'undefined_variable' is not defined
IndexError: list index out of range
KeyError: 'c'
ValueError: invalid literal for int() with base 10: 'abc'
FileNotFoundError: [Errno 2] No such file or directory: 'nonexistent_file.txt'
Esta saída mostra que cada bloco try levantou a exceção esperada, e o bloco except correspondente capturou e imprimiu a mensagem da exceção.
Entender diferentes tipos de exceções e como lidar com elas é essencial para escrever código Python robusto e confiável. Na próxima etapa, você aprenderá como capturar exceções específicas e lidar com elas apropriadamente.
Capturar uma Exceção Específica
Na etapa anterior, você aprendeu sobre diferentes tipos de exceções em Python. Agora, você aprenderá como capturar uma exceção específica usando o bloco try...except. Isso permite que você lide com diferentes erros de maneiras diferentes, tornando seu código mais robusto.
Ao capturar exceções, é uma boa prática ser o mais específico possível. Isso impede que seu bloco except capture acidentalmente exceções que não foram projetadas para lidar, o que pode mascarar erros e dificultar a depuração.
Vamos modificar o script exceptions_demo.py para capturar uma exceção específica, como ValueError, ao tentar converter uma string em um inteiro.
- Abra o arquivo
exceptions_demo.pyno diretório~/projectusando o VS Code. - Modifique o script para capturar apenas o
ValueErrorao converter uma string em um inteiro:
try:
num = int("abc")
except ValueError as e:
print(f"ValueError caught: {e}")
except Exception as e:
print(f"Some other exception: {e}")
print("Continuing execution...")
Neste exemplo, capturamos especificamente o ValueError que ocorre quando int("abc") falha. Se qualquer outra exceção ocorrer dentro do bloco try, ela será capturada pelo bloco except Exception as e:. A instrução print("Continuing execution...") sempre será executada se alguma exceção for capturada, demonstrando que o programa continua a ser executado após o tratamento da exceção.
Agora, vamos executar o script:
- Abra o terminal no VS Code.
- Navegue até o diretório
~/project:
cd ~/project
- Execute o script
exceptions_demo.pyusando o comando python:
python exceptions_demo.py
Você deve ver a seguinte saída:
ValueError caught: invalid literal for int() with base 10: 'abc'
Continuing execution...
Esta saída mostra que o ValueError foi capturado e o programa continuou a ser executado.
Agora, vamos modificar o script para levantar uma exceção diferente, como TypeError, e ver como ela é tratada:
- Abra o arquivo
exceptions_demo.pyno diretório~/projectusando o VS Code. - Modifique o script para levantar um
TypeError:
try:
result = 1 + "a"
except ValueError as e:
print(f"ValueError caught: {e}")
except Exception as e:
print(f"Some other exception: {e}")
print("Continuing execution...")
Agora, execute o script novamente:
python exceptions_demo.py
Você deve ver a seguinte saída:
Some other exception: unsupported operand type(s) for +: 'int' and 'str'
Continuing execution...
Esta saída mostra que o TypeError foi capturado pelo bloco except Exception as e:, porque não há um bloco except TypeError específico.
Capturar exceções específicas permite que você lide com diferentes erros de maneiras diferentes, tornando seu código mais robusto e fácil de depurar. Na próxima etapa, você aprenderá como verificar a instância da exceção.
Verificar a Instância da Exceção
Nesta etapa, você aprenderá como verificar a instância da exceção para obter mais informações sobre o erro que ocorreu. Quando você captura uma exceção, pode acessar o próprio objeto de exceção, que contém detalhes sobre o erro.
Vamos modificar o script exceptions_demo.py para imprimir o tipo e os argumentos da instância da exceção.
- Abra o arquivo
exceptions_demo.pyno diretório~/projectusando o VS Code. - Modifique o script para imprimir o tipo e os argumentos da exceção
ValueError:
try:
num = int("abc")
except ValueError as e:
print(f"Exception type: {type(e)}")
print(f"Exception arguments: {e.args}")
print(f"ValueError caught: {e}")
except Exception as e:
print(f"Some other exception: {e}")
print("Continuing execution...")
Neste exemplo, imprimimos o tipo do objeto de exceção usando type(e) e os argumentos da exceção usando e.args. O atributo e.args é uma tupla contendo os argumentos que foram passados para o construtor da exceção.
Agora, vamos executar o script:
- Abra o terminal no VS Code.
- Navegue até o diretório
~/project:
cd ~/project
- Execute o script
exceptions_demo.pyusando o comando python:
python exceptions_demo.py
Você deve ver a seguinte saída:
Exception type: <class 'ValueError'>
Exception arguments: ("invalid literal for int() with base 10: 'abc'",)
ValueError caught: invalid literal for int() with base 10: 'abc'
Continuing execution...
Esta saída mostra o tipo da exceção (ValueError) e os argumentos passados para o construtor da exceção (uma tupla contendo a mensagem de erro).
Você pode usar essas informações para fornecer mensagens de erro mais detalhadas ou tomar ações específicas com base no tipo e nos argumentos da exceção.
Por exemplo, você pode verificar se os argumentos da exceção contêm uma mensagem de erro específica:
try:
num = int("abc")
except ValueError as e:
if "invalid literal" in e.args[0]:
print("Invalid input: Please enter a valid number.")
else:
print(f"ValueError caught: {e}")
except Exception as e:
print(f"Some other exception: {e}")
print("Continuing execution...")
Neste exemplo, verificamos se o primeiro argumento da exceção ValueError contém a string "invalid literal". Se contiver, imprimimos uma mensagem de erro mais específica.
Verificar a instância da exceção permite que você lide com erros de forma mais inteligente e forneça mensagens de erro mais informativas ao usuário.
Resumo
Neste laboratório, a primeira etapa se concentra em entender diferentes tipos de exceções em Python, que são cruciais para o tratamento eficaz de erros. O laboratório apresenta exceções embutidas comuns, como TypeError, NameError, IndexError, KeyError, ValueError e FileNotFoundError.
O laboratório então fornece exemplos práticos de como essas exceções são levantadas e capturadas usando blocos try...except. Um script Python chamado exceptions_demo.py é criado para demonstrar cada tipo de exceção, mostrando como antecipar e lidar com possíveis erros que podem interromper o fluxo normal da execução de um programa.



