Какое исключение выдается, когда ключ не найден в словаре Python? - PullRequest
28 голосов
/ 17 ноября 2010

Если у меня есть:

map = { 'stack':'overflow' }

try:
  map['experts-exchange']
except:                       <--- What is the Exception type that's thrown here?
  print( 'is not free' )

Не удалось найти его в Интернете. = (

Ответы [ 5 ]

45 голосов
/ 17 ноября 2010
KeyError

если вы сделаете это на консоли без блока try, вам сообщат

>>> a = {}
>>> a['invalid']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'invalid'
>>> 
9 голосов
/ 17 ноября 2010

KeyError.

>>> x = {'try': 1, 'it': 2}
>>> x['wow']

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    x['wow']
KeyError: 'wow'
4 голосов
/ 17 ноября 2010

Это называется KeyError

>>d={1:2}

>>d[2]

Traceback (most recent call last):
  File "<stdin>", line 1, in ?
KeyError: 2
3 голосов
/ 17 ноября 2010
Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> map = { 'a' : 'b' }
>>> print map['c']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'c'
>>> 

Так что дикое предположение может быть ... a KeyError?

1 голос
/ 09 августа 2018

Если вы не знаете, какое конкретное исключение нужно обработать, вы можете просто сделать такую ​​вещь,

map = {'stack': 'overflow'}

try:
    map['experts-exchange']
except Exception as inst:
    print(type(inst))       # the exception instance
    print(inst.args)        # arguments stored in .args
    print(inst)             # __str__ allows args to be printed directly,
                            # but may be overridden in exception subclasses

Результат вышеприведенного кода:

<class 'KeyError'>
('experts-exchange',)
'experts-exchange'

Когда возникает исключение, оно может иметь ассоциированное значение, также известное как аргумент исключения.Наличие и тип аргумента зависят от типа исключения.

В условии исключением может указываться переменная после имени исключения.Переменная связана с экземпляром исключения с аргументами, хранящимися в instance.args.Для удобства экземпляр исключения определяет __ str __ () , поэтому аргументы могут быть напечатаны напрямую, без ссылки на .args.Можно также сначала создать исключение, прежде чем вызывать его, и добавить к нему любые атрибуты по своему усмотрению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...