Вопросы и ответы по Python: «Насколько быстро выполняются исключения?»

Я просто смотрел 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; есть много других примеров, когда вы просто ищите исключение. проверки типов раньше.)

14
задан Amir 30 April 2018 в 23:04
поделиться