Como usar o keyerror no Python?
Exceções de KeyError em Python e Como Lidar com Elas
Por Chad Hansen
A exceção KeyError
em Python é uma exceção comum encontrada por iniciantes. Saber por que um KeyError
pode ser gerado e algumas soluções para evitar que isso interrompa seu programa são etapas essenciais para melhorar como programador Python.
Até o final deste tutorial, você aprenderá:
- O que um
KeyError
geralmente significa em Python - Em que outras situações você pode encontrar um
KeyError
na biblioteca padrão - Como lidar com um
KeyError
quando você o vê
O que um KeyError
geralmente significa em Python
Uma exceção KeyError
em Python é o que ocorre quando você tenta acessar uma chave que não existe em um dicionário (dict
).
A documentação oficial do Python afirma que o KeyError
é gerado quando uma chave de mapeamento é acessada e não é encontrada no mapeamento. Um mapeamento é uma estrutura de dados que mapeia um conjunto de valores para outro. O mapeamento mais comum em Python é o dicionário.
O KeyError
em Python é um tipo de exceção LookupError
e indica que houve um problema ao recuperar a chave que você estava procurando. Quando você vê um KeyError
, o significado semântico é que a chave procurada não pôde ser encontrada.
No exemplo a seguir, você pode ver um dicionário (idades
) definido com as idades de três pessoas. Quando você tenta acessar uma chave que não está no dicionário, ocorre um KeyError
:
Aqui, ao tentar acessar a chave 'Michael'
no dicionário idades
, ocorre um KeyError
. No final do traceback, você obtém as informações relevantes:
- O fato de que um
KeyError
foi gerado - A chave que não pôde ser encontrada, que era
'Michael'
A penúltima linha informa em qual linha a exceção foi gerada. Essa informação é mais útil quando você executa o código Python a partir de um arquivo.
Observação: Quando uma exceção é gerada em Python, ela é acompanhada de um traceback. O traceback fornece todas as informações relevantes para você poder determinar por que a exceção foi gerada e o que a causou.
No programa a seguir, você pode ver o dicionário idades
definido novamente. Desta vez, você será solicitado a fornecer o nome da pessoa para recuperar a idade:
Este código solicitará o nome que você fornecer na solicitação e tentará recuperar a idade dessa pessoa. O que quer que você digite na solicitação será passado como chave para o dicionário idades
. Se a chave não existir, um KeyError
será gerado.
Onde mais você pode encontrar um KeyError
na biblioteca padrão
Embora a ocorrência mais comum de um KeyError
seja ao usar dicionários, você também pode encontrá-lo em outros lugares da biblioteca padrão do Python. Aqui estão alguns exemplos:
- Ao usar o método
dict.pop(key)
, se a chave não existir no dicionário, umKeyError
será gerado. - Ao usar o método
dict.setdefault(key, default)
, se a chave não existir no dicionário e nenhum valor padrão for fornecido, umKeyError
será gerado.
É importante estar ciente desses casos em que um KeyError
pode ser gerado, pois você pode precisar lidar com eles em seu código.
Quando você precisa gerar um KeyError
em seu próprio código
Em certas situações, você pode precisar gerar um KeyError
em seu próprio código. Uma possível razão é quando você está escrevendo um teste de unidade e deseja verificar se uma função gera um KeyError
corretamente em uma determinada situação.
Aqui está um exemplo de código em que um KeyError
é gerado intencionalmente:
Nesse exemplo, a função get_user_age()
recebe um ID de usuário como argumento e tenta recuperar a idade correspondente desse usuário a partir do dicionário user_ages
. Se o ID do usuário não estiver presente no dicionário, um KeyError
é gerado com uma mensagem explicando que o ID do usuário não foi encontrado.
Como lidar com um KeyError
quando você o vê
Quando você se depara com um KeyError
, há várias abordagens que você pode adotar para lidar com ele. Aqui estão algumas soluções comuns:
A solução usual: .get()
A maneira mais comum de evitar um KeyError
ao acessar um dicionário é usar o método .get()
em vez de acessar diretamente a chave. O método .get()
retorna o valor correspondente à chave fornecida ou um valor padrão se a chave não existir.
Veja um exemplo:
Nesse exemplo, ao usar o método .get()
, se a chave 'Michael'
não existir no dicionário, em vez de gerar um KeyError
, será retornado o valor 'Desconhecido'
. Isso permite que você trate a situação em que a chave não existe sem interromper o programa.
A solução rara: Verificar as Chaves
Outra abordagem para evitar um KeyError
é verificar se a chave existe no dicionário antes de tentar acessá-la. Isso pode ser feito usando o operador in
.
Veja um exemplo:
Nesse exemplo, a chave 'Michael'
é verificada usando o operador in
. Se a chave existir no dicionário, a idade correspondente será atribuída à variável idade_michael
. Caso contrário, o valor 'Desconhecido'
será atribuído a essa variável.
A solução geral: try…except
A maneira mais geral de lidar com um KeyError
é usar um bloco try...except
para capturar a exceção e executar um código alternativo quando o KeyError
ocorrer.
Veja um exemplo:
Nesse exemplo, o código dentro do bloco try
é executado. Se ocorrer um KeyError
, o código dentro do bloco except
é executado em vez de interromper a execução do programa. Isso permite que você trate a exceção conforme necessário e continue a execução normal do programa.
Conclusão
O KeyError
é uma exceção comum em Python que geralmente ocorre quando você tenta acessar uma chave que não existe em um dicionário. Entender por que um KeyError
pode ocorrer e conhecer as soluções para lidar com ele são habilidades importantes para um programador Python. Agora, você está mais equipado para identificar, corrigir e prevenir KeyErrors
em seu código Python.