在Python中处理多个KeyError

1 投票
2 回答
1083 浏览
提问于 2025-04-18 14:35

我在尝试捕捉一个KeyError错误两次时遇到了这个问题。Python里有没有什么东西可以阻止你尝试两次捕捉同样的错误呢?

$ ./scratch.py
try getting a
can't get a try getting b
Traceback (most recent call last):
  File "./scratch.py", line 13, in <module>
    print dict['b']
KeyError: 'b'

下面是简化后的代码

dict={}
dict['c'] = '3'

try:
        print 'try getting a'
        print dict['a']
except KeyError:
        print 'can\'t get a try getting b'
        print dict['b']
except:
        print 'can\'t get a or b'

2 个回答

0

你需要再加一个尝试...异常处理:

dict={}
dict['c'] = '3'

try:
        print 'try getting a'
        print dict['a']
except KeyError:
        print 'can\'t get a try getting b'
        try:
            print dict['b']
        except KeyError as e:
            print "Got another exception", e
except:
        print 'can\'t get a or b'
2

我会用一个简单的循环来实现这个:

>>> d = {'c': 1}
>>> keys = ['a', 'b', 'c']
>>> for key in keys:
...     try:
...         value = d[key]
...         break
...     except KeyError:
...         pass
... else:
...     raise KeyError('not any of keys in dict')
... 
>>> value
1
>>> key
'c'

如果你想用一行代码来完成:

key, value = next((k, d[k]) for k in keys if k in d)

撰写回答