Я просто смотрел FAQ по Python, потому что он упоминался в другом вопросе. Я никогда раньше не смотрел на это подробно, я наткнулся на на этот вопрос: "Как быстро есть исключения?":
Блок try/except чрезвычайно эффективен. На самом деле ловить исключение дорого. В версиях Python до 2.0 было распространено использование этой идиомы:
try: value = mydict[key] except KeyError: mydict[key] = getvalue(key) value = mydict[key]
Я немного удивился тому, что часть "ловить исключение дорого". Является ли это ссылкой только на те случаи except
, где вы фактически сохраняете исключение в переменной или вообще все except
(в том числе в приведенном выше примере)?
Я всегда думал, что использование таких идиом, как показано, будет очень pythonic, особенно как в Python, "проще просить прощения, чем получить разрешение". Также многие ответы на SO обычно следуют этой идее.
Является ли производительность для ловли Исключениями действительно так плохо? Должен ли кто-то следовать LBYL ( "Посмотрите, прежде чем прыгать" ) в таких случаях?
(Обратите внимание, что Im не напрямую говорит о примере из FAQ, есть много других примеров, где вы просто смотрите исключение вместо проверки типов раньше.)