@Smeilz1
За любое развитие

Можно ли весь код по умолчанию оборачивать в try/except и чем это грозит?

Проектирую скрипты для сохранения различных данных.
Часто это занимает длительное время и периодически возникают ошибки сохранения мелких данных, которые не критичны, но при этом каждая такая ошибка вызывает Exception и остановку программы. СТоит ли каждое действие по умолчанию обернуть в try/except и Print(exception),чтобы избежать остановок программы и чем это грозит?
Про потерю некоторых данных это ясно и не страшно, а что еще может произойти и что делать в таких случаях?
Upd:
Вот я написал функцию
def reconnect(self):
   self.conn=psycopg2.connect(database=database,user=user,password=password,host=host,port=port)
   self.cur=self.conn.cursor()

Я вызываю ее только в случае Exception при сохранении в базу.
Только вопрос как быть, если мы попробовали сделать reconnect, но и в этот раз не получилось.
Получается мы должны убедиться перед подключением, что connect к PosgreSQl вообще есть или лучше зациклить проверку пока не будет коннекта к базе.
Есть ли такая возможность? Но получается лучше не делать это перед каждым запросом, так как это займет доп время. У меня так
try:
   db.save.alltickerprices(cg.coins)
except Exception:
   #Тут по идее нужно сделать цикл с проверкой существует ли сейчас поключение?
   db.reconnect()
  • Вопрос задан
  • 1445 просмотров
Решения вопроса 5
@artinnok
бекенд-программист
Надо учитывать 2 момента при написании try / except:
  1. Старайтесь писать блок try / except с конкретными ошибками - это позволит обрабатывать те ошибки, которые реально могут произойти. К примеру, Вы в ответе можете получить поле foo или не получить - почти наверняка данный код стоит обработать на KeyError.
  2. Использовать блок try / except без перечисления ошибок (пустой блок) стоит писать только тогда, когда Вы реально знаете зачем он. К примеру, Вы не знаете, какие ошибки могут произойти в коде, т.к. его много или он плохо написан или плохо спроектирован, но при этом, хотелось бы чтобы код не падал и работал дальше - да, тогда его стоит использовать. Но при таком случае, обязательно сделайте хороший логгинг или еррор репортинг админу внутри блока except.
Ответ написан
Понятное жело, практика плохая. В основном из-за того, что у вас не будет оценки критичности возникшего исключения.
Обязательно следует указать except Exception, иначе вы словите то, что точно не следует ловить - напр команды прерывания работы программы.
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
try except нужно в валидации данных, перед сохранением, но валидировать ветками условий, исключения в крайнем случае
Ответ написан
de-iure
@de-iure
just a crazy lawyer
Exception содержит мго других исключения... словите ошибку от какого либо куска кода, например EOFError и не будете знать, что у вас за ошибка и откуда она вылезла... будет только перед вами ваш Print(exception)...
Ответ написан
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Оборачивать всё не надо, бывает 2 типа исключений:
- критические, когда всё сломалось и нужно уронить программу и уведомить об этом в виде логов
- не критические, когда можно ошибку как-то исправить, здесь можно оборачивать, но при этом просто игнорить такую ошибку не вариант, т.к. если ошибка есть, то с этим нужно что-то сделать
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы