Ao escrever programas, frequentemente nos deparamos com situações em que o fluxo normal de execução precisa ser alterado devido a certas condições. Python nos fornece mecanismos para lidar com essas situações através de exceções. As exceções são eventos que podem modificar o fluxo de controle de um programa. Em Python, você pode acionar manualmente uma exceção em qualquer ponto do seu programa usando a instrução raise.
Aqui está um exemplo simples de como usar a instrução raise:
x = -1
if x < 0:
# lança uma exceção se x for negativo
raise Exception('x should not be negative')
Nesse programa, se o valor de x for menor que 0, uma exceção do tipo Exception é lançada com a mensagem "x should not be negative". Se você executar esse programa, ele será interrompido na instrução raise e exibirá a mensagem da exceção, como esta:
Exception: x should not be negative
Além de Exception, o Python vem com várias exceções incorporadas que você pode usar para lançar tipos mais específicos de erros. Veja como você pode lançar um ValueError:
def sqrt(n):
if n < 0:
# lança um ValueError se n for negativo
raise ValueError('Square root not defined for negative numbers')
return n ** 0.5
print(sqrt(4)) # 2.0
print(sqrt(-1)) # ValueError: Square root not defined for negative numbers
Neste exemplo, a função sqrt(n) tenta calcular a raiz quadrada do número n. No entanto, se n for negativo, ela lança um ValueError com uma mensagem específica.
Observe que quando você raise uma exceção, o fluxo do programa é interrompido. Isso é muitas vezes um comportamento desejável, pois permite sinalizar que algo inesperado ocorreu e que o programa não pode lidar com isso. O tipo específico de exceção e a mensagem fornecem mais informações sobre a natureza do erro.
Desafio: Leitor de Arquivos
Em uma grande empresa de software, existem vários arquivos de código em um diretório. Você foi solicitado a escrever uma função Python que abre um arquivo e retorna seu conteúdo. Mas ela também deve ser capaz de lidar com casos em que um arquivo não exista.
A entrada da função é o nome do arquivo.
A função deve ler e retornar o conteúdo do arquivo. No caso de o arquivo não existir, ela deve lançar um FileNotFoundError.