Найти - Пользователи
Полная версия: Время выполнения try/except
Начало » Python для экспертов » Время выполнения try/except
1 2
Ferroman
и вообще, стоит ли на это обращать внимание, или клепать try/except где только можно?
Вообще хороший вопрос. Может кто-то знает хороший подход/методику где надо использовать исключения а где нет? Я их использую постоянно, и это очень сильно “раздувает” код. Это при том, что я далеко не уверен что они везде нужны….
Может есть хорошая схема красивого использоваия исключений?
Андрей Светлов
>>> import this

Errors should never pass silently.
Unless explicitly silenced.

Это - основное руководство. Так что первый способ обычно предпочтительней. Если есть вероятность, что ошибка может быть неявно проигнорирована - бросается исключение. Если это внутренняя часть библиотеки, скрытая от постороннего использования - можно работать с возвращаемыми значениями, выбрасывая исключение при пересечении границы подсистем (в публичном интерфейсе).
shiza
cybergrind
Я делаю как в первом примере - а потом в случае если ошибка требует верхнего вмешательства - генерю свою ошибку.

примерно так:
try:
#any error
except IOError, er:
if 'file read' in str(er): #известная ошибка
....
else: #известная ошибка, требующая обработки навреху
raise myexception, 'izvestnaja oshibka'
except:
raise myexception, 'neizvestnaja oshibka' #неизвестная ошибка
Может это не очень эффективно в плане скороcти, но мне нравится архитектурно.
ZZZ
Андрей Светлов
v = ValueError(“ZZZ”)
raise v
Я, конечно, человек исключительный… Ни кто не спорит… :-)

Мне очень не мало приходится заниматься оптимизацией кода. except действительно обрабатывается дольше. try под час бывает быстрее if. Всё зависит от частоты исключений. Если меньше пяти процентов (эмперически) и/или проверка if требует чего-то большего, чем “i>j”, то используя try, можно очень неплохо выиграть.

Кстати, интересно, что благоприятный assert обрабатывается с той же скоростью, что и if, но из-за неблагоприятного except от него лучше отказаться. (я уж молчу про .pyo!)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB