Возврат строки вместо none без оператора if

Можно ли добиться того же результата, что и в приведенном ниже коде, без создания временной переменной и без использования оператора if? Я пробовал несколько вещей, но я новичок в Python.

 def get_value(dictionary, key):
    temp = dictionary.get(key)
    if temp = None:
        return "Sorry this item doesn't exist"
    else:
        return temp

то есть того, чего я пытаюсь достичь

 def get_value(dictionary, key):
     return dictionary.get(key) else return "Sorry this item doesn't exist"
return dictionary.get(key, "Sorry this item doesn't exist")?
jonrsharpe 10.08.2018 16:48
if temp is None предпочтительнее if temp == None (при условии, что = - это всего лишь опечатка для ==).
chepner 10.08.2018 16:49

Я не уверен, что это вообще хорошая идея ... Предположим, вы звоните в get_value({"a": "Sorry this item doesn't exist"}, "a"). Возвращаемое значение будет "Sorry this item doesn't exist". Но как узнать, вернул ли он фактическое значение, принадлежащее dict, или ваше отказоустойчивое сообщение?

Kevin 10.08.2018 16:50

Еще один паттерн, который вы увидите, - это что-то вроде return dictionary.get(key) or "Sorry this item doesn't exist" как своего рода неудачный оператор слияния нуля. Однако будьте осторожны, потому что все ложные значения, такие как [], 0 или False, будут возвращать вашу строку по умолчанию.

Patrick Haugh 10.08.2018 16:53

@Kevin Это хороший момент, я никогда об этом не думал, спасибо.

Blake Rowden 10.08.2018 16:54
0
5
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете указать значение по умолчанию при вызове get() в словаре. Попробуй это:

def get_value(dictionary, key):
    default = "Sorry this item doesn't exist"
    return dictionary.get(key, default)

Сработало отлично! Спасибо

Blake Rowden 10.08.2018 16:50

Возврат строки вместо None является чем-то вроде анти-шаблона, поскольку нет способа отличить "Sorry this item doesn't exist" как сообщение об ошибке или как фактическое значение, связанное с данным ключом. Вместо этого создайте исключение.

def get_value(dictionary, key):
    try:
        return dictionary[key]
    except KeyError:
        raise Exception("Sorry, this item doesn't exist")

Вы можете определить собственное исключение вместо Exception. Также подумайте, действительно ли ваше исключение добавляет что-нибудь ценное по сравнению с KeyError, уже созданным dict.__getitem__.

else -> except?
Patrick Haugh 10.08.2018 16:54

Другие вопросы по теме