key not found in dictionary

K

KraftDiner

I have a dictionary and sometime the lookup fails...
it seems to raise an exception when this happens.
What should I do to fix/catch this problem?

desc = self.numericDict[k][2]
KeyError: 589824 <---- This is the error that is being produced,
because there is no key
589824.
 
H

hiaips

KraftDiner said:
I have a dictionary and sometime the lookup fails...
it seems to raise an exception when this happens.
What should I do to fix/catch this problem?

desc = self.numericDict[k][2]
KeyError: 589824 <---- This is the error that is being produced,
because there is no key
589824.

It raises a KeyError, as you are seeing. Just use a try/except
construction and handle the error as required by your application:

try:
desc = self.numericDict[k][2]
except KeyError, ke:
<do something - report the error to the user? ignore the error?>
 
L

linnorm

KraftDiner said:
I have a dictionary and sometime the lookup fails...
it seems to raise an exception when this happens.
What should I do to fix/catch this problem?

desc = self.numericDict[k][2]
KeyError: 589824 <---- This is the error that is being produced,
because there is no key
589824.

Given the information provided the simplest answer would be:

try:
desc = self.numericDict[k][2]
except KeyError:
desc = ''
 
C

Chaz Ginger

KraftDiner said:
I have a dictionary and sometime the lookup fails...
it seems to raise an exception when this happens.
What should I do to fix/catch this problem?

desc = self.numericDict[k][2]
KeyError: 589824 <---- This is the error that is being produced,
because there is no key
589824.

As stated you can wrap the access in the try - except - else statement,
as in

try:
foo['bar']
except :
# Handle the error.
pass
else :
# We have it, so use it...
print foo['bar']

Or you can use the has_key() and test it first. For example

if foo.has_key('bar'):
print 'we have it'
else :
print 'we don't have bar.'

That'll do it for me.

Chaz.
 
P

Philippe Martin

KraftDiner said:
I have a dictionary and sometime the lookup fails...
it seems to raise an exception when this happens.
What should I do to fix/catch this problem?

desc = self.numericDict[k][2]
KeyError: 589824 <---- This is the error that is being produced,
because there is no key
589824.

If you agree that the key is not there, then just catch the exception
(try ... except)

Philippe
 
P

Pierre Quentel

Depending on what you want to do if the key doesn't exist, you might
want to use the dictionary method get() :

value = some_dict.get(key,default)

sets value to some_dict[key] if the key exists, and to default
otherwise

Regards,
Pierre
 
B

Ben Finney

KraftDiner said:
I have a dictionary and sometime the lookup fails...
it seems to raise an exception when this happens.
What should I do to fix/catch this problem?

desc = self.numericDict[k][2]
KeyError: 589824 <---- This is the error that is being produced,
because there is no key
589824.

Others have suggested the general solution of using 'try ... except
Foo' for catching a particular exception and dealing with it.

In the specific use case of wanting a default value when a dictionary
doesn't have a particular key, you can also use this:
>>> foo = {0: "spam", 1: "eggs", 7: "beans"}
>>> for key in [1, 2, 7]:
... desc = foo.get(key, None)
... print repr(desc)
...
'eggs'
None
'beans'

A brief description is at 'help(dict.get)'.
 
S

Simon Forman

Or you can use the has_key() and test it first. For example
if foo.has_key('bar'):
print 'we have it'
else :
print 'we don't have bar.'

Nowadays you can also say:

if 'bar' in foo:
# do something
 
F

Fredrik Lundh

Ben said:
In the specific use case of wanting a default value when a dictionary
doesn't have a particular key, you can also use this:
foo = {0: "spam", 1: "eggs", 7: "beans"}
for key in [1, 2, 7]:
... desc = foo.get(key, None)

usually spelled

desc = foo.get(key) # returns None if not present

or

desc = foo.get(key, default)

if you want something other than None.

</F>
 
S

Sion Arrowsmith

Chaz Ginger said:
KraftDiner said:
desc = self.numericDict[k][2]
KeyError: 589824 <---- This is the error that is being produced,
As stated you can wrap the access in the try - except - else statement,
as in

try:
foo['bar']
except :
# Handle the error.

Bare "except" is generally a bad idea. Here, it could be letting
through whole truckloads of other errors. Suppose the OP typos:

try:
desc = self.numericDict[j][2]
except:
# handle missing key

but the except isn't handling a KeyError, it's got a NameError
(assuming j doesn't exist). Or what if self.numericDict[k] exists
but self.numericDict[k][2] gives a TypeError or IndexError? It
really needs to be:

except KeyError:
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,982
Messages
2,570,186
Members
46,739
Latest member
Clint8040

Latest Threads

Top