Pular para o conteúdo

Como usar o keyerror no Python?

CodeMDD.io

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:

idades = {'Jim': 30, 'Pam': 28, 'Kevin': 33}
idades['Michael']

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:

idades = {'Jim': 30, 'Pam': 28, 'Kevin': 33}
pessoa = input('Obter idade de: ')
print(f'{pessoa} tem {idades[pessoa]} anos.')

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, um KeyError 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, um KeyError 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:

def get_user_age(user_id):
user_ages = {'Jim': 30, 'Pam': 28, 'Kevin': 33}
if user_id not in user_ages:
raise KeyError(f'User ID {user_id} not found')
return user_ages[user_id]

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:

idades = {'Jim': 30, 'Pam': 28, 'Kevin': 33}
idade_michael = idades.get('Michael', 'Desconhecido')

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:

idades = {'Jim': 30, 'Pam': 28, 'Kevin': 33}
if 'Michael' in idades:
idade_michael = idades['Michael']
else:
idade_michael = 'Desconhecido'

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:

idades = {'Jim': 30, 'Pam': 28, 'Kevin': 33}
pessoa = 'Michael'
try:
idade_pessoa = idades[pessoa]
print(f'A idade de {pessoa} é {idade_pessoa} anos.')
except KeyError:
print(f'A idade de {pessoa} é desconhecida.')

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.