Ошибка keyerror python как исправить

Согласно официальной документации Python 3, ошибка KeyError возникает, когда  ключ набора (словаря) не найден в наборе существующих ключей.

Эта ошибка встречается, когда мы пытаемся получить или удалить значение ключа из словаря, и этот ключ не существует в словаре.

rana@Brahma: ~$ python3
Python 3.5.2 (default, Jul 10 2019, 11:58:48) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = dict()
>>> a["key1"] = "value1"
>>> print(a["key2"])
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'key2'
>>> 

Доступ к ключам словаря:

Для доступа к ключам словаря мы используем квадратные скобки [ ].

>>> gender = dict()
>>> gender["m"] = "Male"
>>> gender["f"] = "Female"
>>> gender["m"]
'Male'
>>> 

Однако вышеуказанный способ, то есть использование квадратных скобок, имеет один недостаток. Если ключ не существует, мы получаем KeyError.

>>> gender["k"]
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'k'
>>> 

Удаление несуществующего ключа:

>>> del gender["h"]
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'h'
>>> 

Чтобы справиться с такими случаями, мы можем использовать один из следующих методов, основанных на сценарии.

— Используйте метод get()

Мы можем получить значение ключа из словаря, используя метод get. Если пара ключ-значение не существует для данного ключа в словаре, то возвращается None, иначе возвращается значение, соответствующее этому ключу. Это рекомендуемый способ.

>>> gender.get("m")
'Male'
>>> gender.get("k")
>>> 
>>> print(gender.get("k") is None)
True
>>>

Вы можете передать второй необязательный параметр в вызове get(), который является значением, возвращаемым, если ключ не существует в словаре. Значением по умолчанию этого второго параметра является None.

— проверить наличие ключа

Мы можем проверить, существует ли какой-либо конкретный ключ в словаре или нет, и затем на основании этого можно предпринять действия. Например:

gender = dict()
gender["m"] = "Male"
gender["f"] = "Female"

if "k" in gender:
  print("Key k exists in gender")
else:
  print("Key k doesn't exists in gender")

— Используйте try-exc

Если вы не используете или не хотите использовать метод get для доступа к ключам в словаре, используйте блок try-exc.

gender = dict()
gender["m"] = "Male"
gender["f"] = "Female"

try:
  value = gender["k"]
except KeyError:
  print("Key error. Do something else")
except Exception:
  print("Some other error")

— Получить все ключи и перебрать словарь

Мы можем использовать метод keys(), чтобы получить список всех ключей в словаре, а затем выполнить итерацию по этому списку и получить доступ к значениям в словаре.

gender = dict()
gender["m"] = "Male"
gender["f"] = "Female"

keys = gender.keys()

for key in keys:
  print(gender[key])

— Или вы можете напрямую перебирать словарь для пар ключ и значение, используя метод items().

gender = dict()
gender["m"] = "Male"
gender["f"] = "Female"

for item in gender.items():
  print(item[0], item[1])

Аналогично, для удаления значения ключа из словаря мы можем использовать метод pop() вместо del.

Однако, в отличие от метода get(), метод pop() выбрасывает keyError, если удаляемый ключ не существует и второй параметр не передается.

Таким образом, чтобы избежать ошибки KeyError в случае удаления ключа, мы должны передать значение по умолчанию, которое будет возвращено, если ключ не найден, в качестве второго параметра для pop()

>>> 
>>> gender.pop("m")
'Male'
>>> gender.keys()
dict_keys(['f'])
>>> gender.pop("k")
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'k'
>>> gender.pop("k", None)
>>> 

Отображение – это структура данных в Python, которая отображает один набор в другом наборе значений. Словарь Python является наиболее широко используемым для отображения. Каждому значению назначается ключ, который можно использовать для просмотра значения. Ошибка ключа возникает, когда ключ не существует в сопоставлении, которое используется для поиска значения.

В этой статье мы собираемся обсудить ошибки keyerror в Python и их обработку с примерами. Но прежде чем обсуждать ошибку ключа Python, мы узнаем о словаре.

Словарь (dict) в Python – это дискретный набор значений, содержащий сохраненные значения данных, эквивалентные карте. Он отличается от других типов данных тем, что имеет только один элемент, который является единственным значением. Он содержит пару ключей и значений. Это более эффективно из-за ключевого значения.

Двоеточие обозначает разделение пары ключа и значения, а запятая обозначает разделение каждого ключа. Этот словарь Python работает так же, как и обычный словарь. Ключи должны быть уникальными и состоять из неизменяемых типов данных, включая строки, целые числа и кортежи.

Давайте рассмотрим пример, чтобы понять, как мы можем использовать словарь (dict) в Python:

 
# A null Dictionary  
Dict = {}  
print("Null dict: ")  
print(Dict)  
  
# A Dictionary using Integers  
Dict = {1: 'Hill', 2: 'And', 3: 'Mountin'}  
print("nDictionary with the use of Integers: ")  
print(Dict)  
  
# A Dictionary using Mixed keys  
Dict = {'Name': 'John', 1: [17, 43, 22, 51]}  
print("nDictionary with the use of Mixed Keys: ")  
print(Dict)  
  
# A Dictionary using the dict() method  
Dict = dict({1: 'London', 2: 'America', 3:'France'})  
print("nDictionary with the use of dict(): ")  
print(Dict)  
  
# A Dictionary having each item as a Pair  
Dict = dict([(1, 'Hello'),(2, 'World')])  
print("nDictionary with each item as a pair: ")  
print(Dict) 

Вывод:

Null dict:  
{} 
nDictionary with the use of Integers:  
{1: 'Hill', 2: 'And', 3: 'Mountin'} 
nDictionary with the use of Mixed Keys:  
{'Name': 'John', 1: [17, 43, 22, 51]} 
nDictionary with the use of dict():  
{1: 'London', 2: 'America', 3: 'France'} 
nDictionary with each item as a pair:  
{1: 'Hello', 2: 'World'} 

Keyerror в Python

Когда мы пытаемся получить доступ к ключу из несуществующего dict, Python вызывает ошибку Keyerror. Это встроенный класс исключений, созданный несколькими модулями, которые взаимодействуют с dicts или объектами, содержащими пары ключ-значение.

Теперь мы знаем, что такое словарь Python и как он работает. Давайте посмотрим, что определяет Keyerror. Python вызывает Keyerror всякий раз, когда мы хотим получить доступ к ключу, которого нет в словаре Python.

Логика сопоставления – это структура данных, которая связывает один фрагмент данных с другими важными данными. В результате, когда к сопоставлению обращаются, но не находят, возникает ошибка. Это похоже на ошибку поиска, где семантическая ошибка заключается в том, что искомого ключа нет в его памяти.

Давайте рассмотрим пример, чтобы понять, как мы можем увидеть Keyerror в Python. Берем ключи A, B, C и D, у которых D нет в словаре Python. Хотя оставшиеся ключи, присутствующие в словаре, показывают вывод правильно, а D показывает ошибку ключа.

 
# Check the Keyerror 
ages={'A':45,'B':51,'C':67} 
print(ages['A']) 
print(ages['B']) 
print(ages['C']) 
print(ages['D']) 

Вывод:

45 
51 
67 
Traceback(most recent call last): 
File "", line 6, in  
KeyError: 'D' 

Механизм обработки ключевой ошибки в Python

Любой, кто сталкивается с ошибкой Keyerror, может с ней справиться. Он может проверять все возможные входные данные для конкретной программы и правильно управлять любыми рискованными входами. Когда мы получаем KeyError, есть несколько обычных методов борьбы с ним. Кроме того, некоторые методы могут использоваться для обработки механизма ошибки ключа.

Обычное решение: метод .get()

Некоторые из этих вариантов могут быть лучше или не могут быть точным решением, которое мы ищем, в зависимости от нашего варианта использования. Однако наша конечная цель – предотвратить возникновение неожиданных исключений из ключевых ошибок.

Например, если мы получаем ошибку из словаря в нашем собственном коде, мы можем использовать метод .get() для получения либо указанного ключа, либо значения по умолчанию.

Давайте рассмотрим пример, чтобы понять, как мы можем обработать механизм ошибки ключа в Python:

 
# List of vehicles and their prices.  
vehicles = {"Car=": 300000, "Byke": 115000, "Bus": 250000} 
vehicle = input("Get price for: ") 
vehicle1 = vehicles.get(vehicle) 
if vehicle1: 
    print("{vehicle} is {vehicle1} rupees.") 
else: 
    print("{vehicle}'s cost is unknown.") 

Вывод:

Get price for: Car 
Car is 300000 rupees. 

Общее решение для keyerror: метод try-except

Общий подход заключается в использовании блока try-except для решения таких проблем путем создания соответствующего кода и предоставления решения для резервного копирования.

Давайте рассмотрим пример, чтобы понять, как мы можем применить общее решение для keyerror:

 
# Creating a dictionary to store items and prices 
items = {"Pen" : "12", "Book" : "45", "Pencil" : "10"} 
try: 
  print(items["Book"]) 
except: 
  print("The items does not contain a record for this key.")   

Вывод:

45 

Здесь мы видим, что мы получаем стоимость книги из предметов. Следовательно, если мы хотим напечатать любую другую пару «ключ-значение», которой нет в элементах, она напечатает этот вывод.

 
# Creating a dictionary to store items and prices 
items = {"Pen" : "12", "Book" : "45", "Pencil" : "10"} 
try: 
  print(items["Notebook"]) 
except: 
  print("The items does not contain a record for this key.")  

Вывод:

The items does not contain a record for this key. 

Заключение

Теперь мы понимаем некоторые распространенные сценарии, в которых может быть выброшено исключение Python Keyerror, а также несколько отличных стратегий для предотвращения их завершения нашей программы.

В следующий раз, когда мы столкнемся с ошибкой Keyerror, мы будем знать, что это, скорее всего, связано с ошибочным поиском ключа словаря. Посмотрев на последние несколько строк трассировки, мы можем получить всю информацию, которая нам понадобится, чтобы выяснить, откуда взялась проблема.

Если проблема заключается в поиске ключа словаря в нашем собственном коде, мы можем использовать более безопасную функцию .get() с возвращаемым значением по умолчанию вместо запроса ключа непосредственно в словаре. Если наш код не вызывает проблемы, блок try-except – лучший вариант для регулирования потока нашего кода.

Исключения не должны пугать. Мы можем использовать эти методы, чтобы наши программы выполнялись более предсказуемо, если мы понимаем информацию, представленную нам в их обратных трассировках, и первопричину ошибки.

Изучаю Python вместе с вами, читаю, собираю и записываю информацию опытных программистов.

  • Редакция Кодкампа

17 авг. 2022 г.
читать 2 мин


Одна ошибка, с которой вы можете столкнуться при использовании pandas:

KeyError : 'column_name'

Эта ошибка возникает, когда вы пытаетесь получить доступ к несуществующему столбцу в pandas DataFrame.

Обычно эта ошибка возникает, когда вы просто неправильно пишете имена столбцов или случайно включаете пробел до или после имени столбца.

В следующем примере показано, как исправить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, мы создаем следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'points': [25, 12, 15, 14, 19, 23, 25, 29],
 'assists': [5, 7, 7, 9, 12, 9, 9, 4],
 'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})

#view DataFrame
df

points assists rebounds
0 25 5 11
1 12 7 8
2 15 7 10
3 14 9 6
4 19 12 6
5 23 9 5
6 25 9 9
7 29 4 12

Затем предположим, что мы пытаемся напечатать значения в столбце с именем «точка»:

#attempt to print values in 'point' column
print(df['point'])

KeyError  Traceback (most recent call last)
/srv/conda/envs/notebook/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
 3360 try:
-> 3361 return self._engine.get_loc(casted_key)
 3362 except KeyError as err:

/srv/conda/envs/notebook/lib/python3.7/site-packages/pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

/srv/conda/envs/notebook/lib/python3.7/site-packages/pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError : 'point'

Поскольку в нашем DataFrame нет столбца «точка», мы получаем KeyError .

Как исправить ошибку

Чтобы исправить эту ошибку, просто убедитесь, что мы правильно написали имя столбца.

Если мы не уверены во всех именах столбцов в DataFrame, мы можем использовать следующий синтаксис для печати каждого имени столбца:

#display all column names of DataFrame
print(df.columns.tolist ())

['points', 'assists', 'rebounds']

Мы видим, что есть столбец с именем «точки», поэтому мы можем исправить нашу ошибку, правильно написав имя столбца:

#print values in 'points' column
print(df['points'])

0 25
1 12
2 15
3 14
4 19
5 23
6 25
7 29
Name: points, dtype: int64

Мы избегаем ошибки, потому что правильно написали имя столбца.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить: столбцы перекрываются, но суффикс не указан
Как исправить: объект «numpy.ndarray» не имеет атрибута «добавлять»
Как исправить: при использовании всех скалярных значений необходимо передать индекс

In this article, we will learn how to handle KeyError exceptions in Python programming language.

What are Exceptions?

  • It is an unwanted event, which occurs during the execution of the program and actually halts the normal flow of execution of the instructions.
  • Exceptions are runtime errors because, they are not identified at compile time just like syntax errors which occur due to wrong indentation, missing parentheses, and misspellings. 
  • Examples of built-in exceptions in Python – KeyError exception, NameError, ImportError, ZeroDivisionError, FloatingPointError, etc.

What is KeyError Exception?

A KeyError Exception occurs when we try to access a key that is not present. For example, we have stored subjects taken by students in a dictionary with their names as a key and subjects as a value and if we want to get the value of a key that doesn’t exist then we get a KeyError exception. Let’s understand this by an example.

Example:

Python3

subjects = {'Sree': 'Maths',

            'Ram': 'Biology',

            'Shyam': 'Science',

            'Abdul': 'Hindi'}

print(subjects['Fharan'])

Explanation: In the above example we have created a dictionary and tried to print the subject of ‘Fharan’ but we got an error in the output as shown below because that key is not present in our dictionary which is called a Python KeyError exception.

Output:

Traceback (most recent call last):
  File "4119e772-3398-41b7-816b-6b20791538e9.py", line 7, in <module>
    print(subjects['Fharan'])
KeyError: 'Fharan'

Methods to handle KeyError exception

Method 1: Using Try, Except keywords

The code that can(may) cause an error can be put in the try block and the code that handles it is to be included in the except block so that abrupt termination of the program will not happen because the exception is being handled here by the code in the expected block. To know more about try, except refer to this article Python Try Except.

Example:

Python3

subjects = {'Sree': 'Maths',

            'Ram': 'Biology',

            'Shyam': 'Science',

            'Abdul': 'Hindi'}

try:

    print('subject of Fharan is:',

          subjects['Fharan'])

except KeyError:

    print("Fharan's records doesn't exist")

Explanation: In this example, subjects[‘Fharan’] raises an exception but doesn’t halt the program because the exception is caught by expect block where some action is being done (printing a message that “Fharan’s records doesn’t exist”)

Output:

Fharan's records doesn't exist

Method 2: Using get() method

The get() method will return the value specified by the given key, if a key is present in the dictionary, if not it will return a default value given by the programmer. If no default value is specified by the programmer, it returns “None” as output.

Example:

Python3

subjects = {'Sree': 'Maths',

            'Ram': 'Biology',

            'Shyam': 'Science',

            'Abdul': 'Hindi'}

sub = subjects.get('sreelekha')

print(sub)

Output: In the above example, there is no key “sreeram” hence, it returns “None”.

None

If a default value is to be returned instead of “None”, we need to specify the default value in this way:  

sub = subjects.get(‘sreeram’, “Student doesn’t exist”)

Example :

Python3

subjects = {'sree': 'Maths', 'ram': 'Biology'}

sub = subjects.get('sreeram', "Student doesn't exist")

print(sub)

Output:

Student doesn't exist

To know more about exception handling in python please refer to this article Python Exception Handling.

Last Updated :
30 Dec, 2022

Like Article

Save Article

In my python program I am getting this error:

KeyError: 'variablename'

From this code:

path = meta_entry['path'].strip('/'),

Can anyone please explain why this is happening?

asked Apr 12, 2012 at 2:11

David Liaw's user avatar

David LiawDavid Liaw

3,1732 gold badges18 silver badges28 bronze badges

3

A KeyError generally means the key doesn’t exist. So, are you sure the path key exists?

From the official python docs:

exception KeyError

Raised when a mapping (dictionary) key is not found in the set of
existing keys.

For example:

>>> mydict = {'a':'1','b':'2'}
>>> mydict['a']
'1'
>>> mydict['c']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'c'
>>>

So, try to print the content of meta_entry and check whether path exists or not.

>>> mydict = {'a':'1','b':'2'}
>>> print mydict
{'a': '1', 'b': '2'}

Or, you can do:

>>> 'a' in mydict
True
>>> 'c' in mydict
False

maxkoryukov's user avatar

maxkoryukov

4,1595 gold badges32 silver badges53 bronze badges

answered Apr 12, 2012 at 2:15

RanRag's user avatar

RanRagRanRag

48.1k38 gold badges114 silver badges166 bronze badges

19

I fully agree with the Key error comments. You could also use the dictionary’s get() method as well to avoid the exceptions. This could also be used to give a default path rather than None as shown below.

>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None

answered Apr 12, 2012 at 2:20

Adam Lewis's user avatar

Adam LewisAdam Lewis

6,9577 gold badges43 silver badges62 bronze badges

1

For dict, just use

if key in dict

and don’t use searching in key list

if key in dict.keys()

The latter will be more time-consuming.

Roberto Caboni's user avatar

answered Feb 18, 2016 at 15:02

keywind's user avatar

keywindkeywind

1,12514 silver badges24 bronze badges

0

Yes, it is most likely caused by non-exsistent key.

In my program, I used setdefault to mute this error, for efficiency concern.
depending on how efficient is this line

>>>'a' in mydict.keys()  

I am new to Python too. In fact I have just learned it today. So forgive me on the ignorance of efficiency.

In Python 3, you can also use this function,

get(key[, default]) [function doc][1]

It is said that it will never raise a key error.

answered Jan 10, 2013 at 21:44

Glenn Yu's user avatar

Glenn YuGlenn Yu

6031 gold badge7 silver badges11 bronze badges

1

Let us make it simple if you’re using Python 3

mydict = {'a':'apple','b':'boy','c':'cat'}
check = 'c' in mydict
if check:
    print('c key is present')

If you need else condition

mydict = {'a':'apple','b':'boy','c':'cat'}
if 'c' in mydict:
    print('key present')
else:
    print('key not found')

For the dynamic key value, you can also handle through try-exception block

mydict = {'a':'apple','b':'boy','c':'cat'}
try:
    print(mydict['c'])
except KeyError:
    print('key value not found')
    mydict = {'a':'apple','b':'boy','c':'cat'}

alper's user avatar

alper

2,8018 gold badges53 silver badges99 bronze badges

answered Jun 29, 2020 at 4:24

Muthukumar's user avatar

MuthukumarMuthukumar

5544 silver badges9 bronze badges

I received this error when I was parsing dict with nested for:

cats = {'Tom': {'color': 'white', 'weight': 8}, 'Klakier': {'color': 'black', 'weight': 10}}
cat_attr = {}
for cat in cats:
    for attr in cat:
        print(cats[cat][attr])

Traceback:

Traceback (most recent call last):
      File "<input>", line 3, in <module>
    KeyError: 'K'

Because in second loop should be cats[cat] instead just cat (what is just a key)

So:

cats = {'Tom': {'color': 'white', 'weight': 8}, 'Klakier': {'color': 'black', 'weight': 10}}
cat_attr = {}
for cat in cats:
    for attr in cats[cat]:
        print(cats[cat][attr])

Gives

black
10
white
8

answered Feb 8, 2018 at 12:25

pbaranski's user avatar

pbaranskipbaranski

22.4k18 gold badges99 silver badges115 bronze badges

This means your array is missing the key you’re looking for. I handle this with a function which either returns the value if it exists or it returns a default value instead.

def keyCheck(key, arr, default):
    if key in arr.keys():
        return arr[key]
    else:
        return default


myarray = {'key1':1, 'key2':2}

print keyCheck('key1', myarray, '#default')
print keyCheck('key2', myarray, '#default')
print keyCheck('key3', myarray, '#default')

Output:

1
2
#default

answered Aug 1, 2013 at 0:31

Ben Sullins's user avatar

Ben SullinsBen Sullins

2312 silver badges9 bronze badges

1

For example, if this is a number :

ouloulou={
    1:US,
    2:BR,
    3:FR
    }
ouloulou[1]()

It’s work perfectly, but if you use for example :

ouloulou[input("select 1 2 or 3"]()

it’s doesn’t work, because your input return string ‘1’. So you need to use int()

ouloulou[int(input("select 1 2 or 3"))]()

answered Aug 2, 2019 at 22:36

lemoinemeddy's user avatar

Понравилась статья? Поделить с друзьями:
  • Ошибка keyboard not found
  • Ошибка keyboard interrupt
  • Ошибка keyboard firmware update tool
  • Ошибка key ниссан теана j32
  • Ошибка join clan room wot