Форум сайта python.su
0
Всем привет!
Объясните, пожалуйста, поподробнее, в каких случаях хорошим стилем является генерация исключения при ошибке, а в каких возвращение кода ошибки с помощью return.
Сейчас пользуюсь и тем и другим, но какой-то четко сформированной методики нет и периодически меня это мучает…
Офлайн
221
Если посмотреть на исходники всяких проектов, то там повсеместно используется исключения, как стандартные, так и самописанные для персональных случаев. И это более практикуемый подход, даже более питонячий.
Код ошибки возвращается при аварийном завершении работы программы - это UNIX way.
Офлайн
0
JOHN_16
Если посмотреть на исходники всяких проектов, то там повсеместно используется исключения, как стандартные, так и самописанные для персональных случаев. И это более практикуемый подход, даже более питонячий.
JOHN_16
Код ошибки возвращается при аварийном завершении работы программы - это UNIX way.

Офлайн
53
не вижу сути проблемы
если есть ошибка, если нужно перехвати, если нужно рейзни свою
Офлайн
0
sander
не вижу сути проблемыесли есть ошибка, если нужно перехвати, если нужно рейзни свою

Офлайн
0
Ошибку следует возвращать явно, когда вызывающий код точно знает что с ней делать (имеет всю необходимую информацию, чтобы это определить).
Исключение кидается, когда вызывающий код может не знать что с этой ошибкой делать (не имеет информации для принятия решения). В этом случае кинуть исключение проще, чем делать проброс ошибки через 100500 функций.
Офлайн
221
Tiendil
как раз таки наоборот. Описывается собственный класс ошибки, в любом месте генерируется исключение на основе этого класса. Далее если блок try принимающий либо знает что с ним делать либо отправляет дальше. Случай если не знает что делать вообще больше похож на ситуацию когда код аварийно завершает свое выполнение. Т.е. выглядит это условно так:
try: # код здесь except My_little_warning: # на случай ожидаемой ошибки можно предпринять небольшие действия, # не отражающиеся на работе кода в целом. Или попробовать другие # аргументы для кода выполняющего ся в цикле и перебирающие варианты # в поисках рабочего и т.д. и .т.п except My_exception: # произошла ошибка, пишем в лог, отменяем транзакцию и тп except Exception: # тот самый случай кода мы не знаем что за ошибка, но не надо # аварийно завершать код except BaseException: # видел вот такой вот прием - т.к. этот класс находится выше всех # остальных в иерархии, то его явная генерация как раз на случай # "запланированного аварийного завершения"
Офлайн