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?
38 Answers
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 19I 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 1For 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.
0Yes, 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.
1I 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 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'} 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 1For 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"))]()