Уведомления

Группа в Telegram: @pythonsu

#1 Май 28, 2008 14:05:54

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Время выполнения try/except

и вообще, стоит ли на это обращать внимание, или клепать try/except где только можно?
Вообще хороший вопрос. Может кто-то знает хороший подход/методику где надо использовать исключения а где нет? Я их использую постоянно, и это очень сильно “раздувает” код. Это при том, что я далеко не уверен что они везде нужны….
Может есть хорошая схема красивого использоваия исключений?

Офлайн

#2 Май 28, 2008 14:35:45

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Время выполнения try/except

>>> import this

Errors should never pass silently.
Unless explicitly silenced.

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



Офлайн

#3 Май 28, 2008 21:46:29

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Время выполнения try/except

cybergrind
Я делаю как в первом примере - а потом в случае если ошибка требует верхнего вмешательства - генерю свою ошибку.

примерно так:

try:
#any error
except IOError, er:
if 'file read' in str(er): #известная ошибка
....
else: #известная ошибка, требующая обработки навреху
raise myexception, 'izvestnaja oshibka'
except:
raise myexception, 'neizvestnaja oshibka' #неизвестная ошибка
Может это не очень эффективно в плане скороcти, но мне нравится архитектурно.



Отредактировано (Май 28, 2008 21:47:03)

Офлайн

#4 Май 29, 2008 00:23:55

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Время выполнения try/except

Андрей Светлов
v = ValueError(“ZZZ”)
raise v
Я, конечно, человек исключительный… Ни кто не спорит… :-)

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

Кстати, интересно, что благоприятный assert обрабатывается с той же скоростью, что и if, но из-за неблагоприятного except от него лучше отказаться. (я уж молчу про .pyo!)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version