Я просто смотрел FAQ по Python, потому что он упоминался в другом вопросе. Никогда раньше не рассматривая это подробно, я натолкнулся на вопрос : «Насколько быстры исключения?»:
Блок try / except чрезвычайно эффективен. На самом деле перехват исключения стоит дорого. В версиях Python до 2.0 обычно использовалась эта идиома:
try: value = mydict [key] except KeyError: mydict [key] = getvalue (key) value = mydict [key]
Меня немного удивила часть «ловить исключение дорого» . Относится ли это только к тем , кроме
случаев, когда вы фактически сохраняете исключение в переменной, или вообще ко всем , кроме
(включая тот, что в примере выше)?
I ' Мы всегда думали, что использование таких идиом, как показано, было бы очень питоническим, особенно как в Python «Легче просить прощения, чем получить Разрешение» . Также многие ответы на SO обычно следуют этой идее.
Неужели перехват исключений настолько плох? Следует ли в таких случаях лучше следовать LBYL («Посмотрите, прежде чем прыгать»)?
(Обратите внимание, что я не говорю напрямую о примере из FAQ; есть много других примеров, когда вы просто ищите исключение. проверки типов раньше.)