From a firmware writer's perspective sometimes every μs matters. So I tested a failed lookup using EAFP against two LBYL approaches on the Pyboard:
Code: Select all
import utime as time
mydict = {'cat':0,'dog':1,'pig':2,'cow':3,'rabbit':4,'bull':5,'ewe':6,'ram':7,'hart':8,'aardvark':9}
t = time.ticks_us()
try:
res = mydict['hind']
except KeyError:
res = -1
delta = time.ticks_diff(time.ticks_us(), t)
print('Trap exception: time = {}us result = {}'.format(delta, res))
t = time.ticks_us()
res = mydict.pop('hind', -1)
delta = time.ticks_diff(time.ticks_us(), t)
print('Pop: time = {}us result = {}'.format(delta, res))
t = time.ticks_us()
if 'hind' in mydict:
res = mydict['hind']
else:
res = -1
delta = time.ticks_diff(time.ticks_us(), t)
print('Test lookup: time = {}us result = {}'.format(delta, res))
Code: Select all
===
Trap exception: time = 62us result = -1
Pop: time = 24us result = -1
Test lookup: time = 21us result = -1
Trap exception: 62μs as above
Pop: 34μs
Test lookup: 32μs