Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 31, 2011 11:55:33

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

польза от try-except?

я все время писал на пхп и проверял значения или индексы массивов с помощью функций, типа sizeof, isset, in_array

но изучая питон, я постоянно вижу что вместо таких проверок везде стоят try-except конструкции

появилась догадка, что этот способ позволяет ускорить быстродействие, засчет отказа от выполнения функций-проверок
ведь они выполняются всегда, даже если потом все ОК и работа идет дальше

как вы считаете, правильная догадка или есть другие причины юзать перехват исключений вместо проверок значений?

правда один очевидный минус этих перехватов - ужасно раздутый код
по-крайней мере у меня такой сейчас получается, если вставлять обработчики везде где возможен фейл



Офлайн

#2 Янв. 31, 2011 12:02:14

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

польза от try-except?

Игнат
что этот способ позволяет ускорить быстродействие,
Быстродействие этот способ не увеличивает, но зато делает код понятным и гибким.



Офлайн

#3 Янв. 31, 2011 12:08:33

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

польза от try-except?

Игнат
оявилась догадка, что этот способ позволяет ускорить быстродействие, засчет отказа от выполнения функций-проверок
ведь они выполняются всегда, даже если потом все ОК и работа идет дальше
Скорее наоборот. try-except выполняется медленне, чем проверка значений. Чтобы понять, нужно углубится в то, как они реализовываются на уровне интерпретатора/виртуальной машины (и это характерно не только для Python). Интерпретатору приходится запоминать свое состояние и при возникновении ошибки в блоке try возвращаться назад (по буржуйски - upwinding). Из-за этого и тормоза.

В общем случае использовать if-else нужно для предсказуемых ошибок, try-except - для непредсказуемых.



Отредактировано (Янв. 31, 2011 12:09:10)

Офлайн

#4 Янв. 31, 2011 13:08:39

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

польза от try-except?

Блок try/except без инициации исключений работает так же быстро, как если бы его не было вообще. А вот в случае генерации ошибки и его вылавливания, это уже медленно. try/except рекомендуется ставить тогда, когда подразумевается правильное выполнение программы (это не значит, что ошибки не предсказуемые, а значит, что они, скажем так, редки). Например, мы открываем файл для получение каких-либо данных, считая, что так и должно быть, нам нужны эти данные и мы расчитываем их получить. Но тут вдруг оказывается, что такого файла нет. Самое время заключить этот кусок кода в скобки try/except и не мешать в одну кучу сам код и проверку на существования файла.



Отредактировано (Янв. 31, 2011 13:12:16)

Офлайн

#5 Янв. 31, 2011 13:54:19

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

польза от try-except?

Первое. Производительность нужно измерять. Профайлером и всяко, для вашего конкретного кода.
Второе… А зачем второе, если первое все равно никто не делает?…
Читают, что “обработка исключения вчетверо дольше”… И как это соотносится со скоростью выполнения программы?

Например: “код на С в тысячу раз быстрее кода на <<подставьте нужное>>”. А я сумею написать на том же С такое, что будет в миллион раз медленней любой альтернативы - и что с того?



Офлайн

#6 Янв. 31, 2011 14:18:33

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

польза от try-except?

Андрей Светлов
. А я сумею написать на том же С такое, что будет в миллион раз медленней любой альтернативы
Вот если бы вы написали: “А я сумею написать на том же С такое, что будет в миллион раз быстрее любой альтернативы”, вот это было бы другое дело.



Офлайн

#7 Янв. 31, 2011 19:09:30

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

польза от try-except?

> польза от try-except?
большая польза и куча применений.

вот пример не с ошибкой - есть какие-то функции для поиска какого-то значения и когда значение найдено, вместо кучи return'ов из ф-ии в ф-ию можно просто вызвать raise ResultFinded('hello') и программа сразу переходит в нужную точку программы:

# coding: utf8

import time

class ResultFinded(Exception):
pass

def loop():
while True:
time.sleep(0.5)
raise ResultFinded('hello')

def main():
print '1'
loop()
print '2'

try:
main()
except ResultFinded as e:
print 'find',e

Офлайн

#8 Янв. 31, 2011 21:09:11

certanista
От:
Зарегистрирован: 2010-10-28
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

польза от try-except?

Это такой аналог goto получился.



Офлайн

#9 Янв. 31, 2011 21:10:32

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

польза от try-except?

java developer detected =)



Офлайн

#10 Фев. 1, 2011 03:25:50

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

польза от try-except?

and cured :)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version