在Python中处理多个键错误

在Python中处理多个键错误,python,Python,当我两次尝试捕捉一个键错误时,就会出现这个错误。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

当我两次尝试捕捉一个键错误时,就会出现这个错误。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'
        try:
            print dict['b']
        except KeyError as e:
            print "Got another exception", e
except:
        print 'can\'t get a or b'

我将通过一个简单的for循环来实现这一点:

>>> 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]),如果k在d中,则k在d中)

为什么不使用
dict.get
?您也没有尝试使用
print dict['b']
。您好,Padriac-dict.get似乎没有抛出异常并以静默方式失败?如果找不到钥匙,我想做点什么。从逻辑上讲,我认为缩进不适合第二次尝试。因为如果dict['a']存在,就不会有错误,而且它从不尝试检查dict['b'],我相信@nev正在使用代码片段来理解python异常处理机制。我想指出的关键点是:如果您想处理异常处理程序中抛出的异常,则需要添加另一个try…except块。操作系统中有一个类似的问题:
>>> 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'