Найти - Пользователи
Полная версия: польза от try-except?
Начало » Python для новичков » польза от try-except?
1 2
Игнат
я все время писал на пхп и проверял значения или индексы массивов с помощью функций, типа sizeof, isset, in_array

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

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

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

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

В общем случае использовать if-else нужно для предсказуемых ошибок, try-except - для непредсказуемых.
Isem
Блок try/except без инициации исключений работает так же быстро, как если бы его не было вообще. А вот в случае генерации ошибки и его вылавливания, это уже медленно. try/except рекомендуется ставить тогда, когда подразумевается правильное выполнение программы (это не значит, что ошибки не предсказуемые, а значит, что они, скажем так, редки). Например, мы открываем файл для получение каких-либо данных, считая, что так и должно быть, нам нужны эти данные и мы расчитываем их получить. Но тут вдруг оказывается, что такого файла нет. Самое время заключить этот кусок кода в скобки try/except и не мешать в одну кучу сам код и проверку на существования файла.
Андрей Светлов
Первое. Производительность нужно измерять. Профайлером и всяко, для вашего конкретного кода.
Второе… А зачем второе, если первое все равно никто не делает?…
Читают, что “обработка исключения вчетверо дольше”… И как это соотносится со скоростью выполнения программы?

Например: “код на С в тысячу раз быстрее кода на <<подставьте нужное>>”. А я сумею написать на том же С такое, что будет в миллион раз медленней любой альтернативы - и что с того?
Isem
Андрей Светлов
. А я сумею написать на том же С такое, что будет в миллион раз медленней любой альтернативы
Вот если бы вы написали: “А я сумею написать на том же С такое, что будет в миллион раз быстрее любой альтернативы”, вот это было бы другое дело.
o7412369815963
> польза от 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
certanista
Это такой аналог goto получился.
regall
java developer detected =)
Isem
and cured :)
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