2015-09-14 3 views
0

Как я могу исправить KeyError в словаре python?Обработка ключа с помощью словаря python

Меня попросили создать словарь и создать функцию number_dictionary(text, n). Я могу вернуть True или False, если text соответствует n, но есть KeyError, когда я помещаю что-то, чего нет в словаре, когда он должен возвращать False.

Я поставил два условия вместе (когда они не совпадают, а не в словаре), но затем он возвращает все как False.

def number_dictionary(text,n): 
    numbers={'two': '2', 'three': '3', 'four': '4'} 
    if n != numbers[text] or n or text not in numbers: 
     return(False) 
    else: 
     return(True) 
+1

См. [Как спросить] (http://stackoverflow.com/help/how-to-ask), в частности [mcve] (http://stackoverflow.com/help/mcve). –

ответ

4

Три варианта:

  • Catch the exception:

    try: 
        foo = somedictionary[bar] 
    except KeyError: 
        return False 
    
  • Используйте кнопки dict.get() method вернуть значение по умолчанию вместо, что значение по умолчанию значение по умолчанию None:

    foo = somedictionary.get(bar) # return None if bar is not a key 
    
  • Тест для ключа отдельно:

    if bar not in somedictionary: 
        return False 
    

В вашем случае испытания для ключа после пытается получить к нему доступ. Вы можете поменять тест (сбросив or n):

def number_dictionary(text, n): 
    numbers={'two': '2', 'three': '3', 'four': '4'} 
    return text not in numbers or n != numbers[text] 

Или просто использовать dict.get(), по умолчанию None никогда не будет соответствовать строке n:

def number_dictionary(text, n): 
    numbers = {'two': '2', 'three': '3', 'four': '4'} 
    return numbers.get(text) == n 

Оба not in и == сравнительные тесты уже производят либо True или False, поэтому нет необходимости использовать if и отдельные return заявления.

+0

Я бы поставил '' '.get()' '' первый и '' 'try .. except''' последний. –

+0

@IgorPomaranskiy: Зачем это было? Оба являются допустимыми вариантами, и у них нет явного преимущества в целом. Это зависит от того, как часто отсутствует ключ, какой вариант быстрее, например. Другими словами: это зависит от конкретного кода и типичных частот проверяемых ключей. –

+0

Спасибо вам большое! Это устранило проблему :) есть ли на самом деле тест для скрытого ввода, знаете ли вы, что это такое? – ameliagunawan

Смежные вопросы