Я тоже начинающий питон. Хотя я не могу сказать, почему именно обработка исключений была названа дешевой в контексте этого ответа, вот мои мысли:
Обратите внимание, что проверка с помощью if-elif-else должна каждый раз оценивать условие. Обработка исключений, включая поиск обработчика исключений, происходит только в исключительном состоянии, которое в большинстве случаев может быть редким. Это явное повышение эффективности.
Как отметил Джей, лучше использовать условную логику, а не исключения, когда существует высокая вероятность отсутствия ключа. Это потому, что если ключ отсутствует в большинстве случаев, это не исключительное условие.
Тем не менее, я предлагаю вам не беспокоиться об эффективности, а скорее о смысле. Используйте обработку исключений, чтобы выявлять исключительные случаи и проверять условия, когда вы хотите что-то решить. Мне напомнили о важности значения С.Лотт только вчера.
Показательный пример:
def xyz(key):
dictOb = {x:1, y:2, z:3}
#Condition evaluated every time
if dictOb.has_key(key): #Access 1 to dict
print dictOb[key] #Access 2
Versus
#Exception mechanism is in play only when the key isn't found.
def xyz(key):
dictOb = {x:1, y:2, z:3}
try:
print dictOb[key] #Access 1
except KeyError:
print "Not Found"
В целом, имея некоторый код, который обрабатывает что-то, например, отсутствующий ключ, на всякий случай требует обработки исключений, но в ситуациях, когда ключ отсутствует в большинстве случаев, то, что вы действительно хотите сделать, это решить, если ключ присутствует => if-else. Python подчеркивает и поощряет говорить, что вы имеете в виду.
Почему исключения предпочтительнее if-elif ->
- Он более четко выражает значение, когда вы ищете врага исключительный он же необычный / неожиданный случай в вашем коде.
- Он чище и намного удобочитаемее.
- Он более гибкий.
- Может использоваться для написания более краткого кода.
- Избегает много неприятных проверок.
- Это более ремонтопригодно.
Примечание
Когда мы избегаем использования try-исключения, исключения продолжают возникать. Исключения, которые не обрабатываются, просто отправляются в обработчик по умолчанию. Когда вы используете try-exc, вы можете справиться с ошибкой самостоятельно. Это может быть более эффективным, поскольку if-else требует оценки условия, в то время как поиск обработчика исключений может быть дешевле. Даже если это правда, выигрыш от этого будет слишком незначительным, чтобы думать о нем.
Надеюсь, мой ответ поможет.