Я также начинающий питон. Хотя я не могу сказать, почему именно обработка исключений была названа дешевой в контексте этого ответа, вот мои мысли:
Обратите внимание, что проверка с помощью 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 подчеркивает и поощряет говорить, что вы имеете в виду.
Почему исключения предпочтительнее, если-Элиф ->
- Он выражает смысл более четко, когда вы смотрите Foe исключительный ака необычных/неожиданных условий в вашем коде.
- Это более чистый и более читаемый.
- Это более гибкий.
- Его можно использовать для написания более сжатого кода.
- Избегает множества неприятных проверок.
- Это более удобно.
Примечание Когда мы избегаем использования примерочных, за исключением, Исключения продолжают воспитываются. Исключения, которые не обрабатываются, просто переходят к обработчику по умолчанию. Когда вы используете try-except, вы можете самостоятельно обработать эту ошибку. Это может быть более эффективным, поскольку if-else требует оценки условий, в то время как поиск обработчика исключений может быть более дешевым. Даже если это правда, выигрыш от него будет слишком незначительным, чтобы думать о нем.
Надеюсь, мой ответ поможет.
Связанная дискуссия: http://stackoverflow.com/questions/204308/checking-for-member-existence-in-python – tzot
+1 Для опроса Евангелия вместо того, чтобы верить всему, что вы читаете :) –