Форум сайта python.su
Добрый день.
Слежу за появлениями исключения в базе. При стабильной связи все хорошо. Проблема возникает при потере связи с базой и происходит остановка работы скрипта. Запуск скрипта с отключенной сетью проходит корректно, после подключения сети скрипт остается работающим
Как правильно отловить исключение и перезапустить процесс при пропадание сети (связи с базой)?.
# -*- coding: utf-8 -*- import smtplib import fdb import os import threading import _thread from email.mime.text import MIMEText from email.header import Header def send_m(s): HOST = "......................" smtp_port=25 smtpObj = smtplib.SMTP(HOST, smtp_port) msg = MIMEText(s, 'plain', 'utf-8') msg['To'] = ".............." msg['From'] = ".........." msg['Subject'] = Header("............", 'utf-8') smtpObj.send_message(msg) def DB(): con = fdb.connect(dsn='............') return con def Start1(): try: print("Start") con=DB() conduit = con.event_conduit( ['EVENTS1','EVENTS2'] ) conduit.begin() e = conduit.wait() print (e) if e['EVENTS1']==1: cur = con.cursor() SELECT = ".............................." cur.execute(SELECT) rows = cur.fetchall() msg_t='.........................' print (msg_t) send_m(msg_t) if e['EVENTS2']==1: cur = con.cursor() SELECT = "..............." cur.execute(SELECT) rows = cur.fetchall() msg_t='........................' print (msg_t) send_m(msg_t) return conduit except: print("wait") pass def main(): while True: try: print("Начало") conduit=Start1() except Exception: pass print("Repear") conduit.close() if __name__== '__main__': while True: try: main() except: pass print("Repair1")
Офлайн
alexey_gh
Какой-то странный ваш код
def main(): while True: try: conduit=Start1() except Exception: pass conduit.close()
Офлайн
FishHookЭто код уже от без исходности, никак я не могу отловить исключение в потоке. которое создается для прослушивания события из базы. По этому везде уже понаставил try… execpt но в них не залетает это исключение.
alexey_ghКакой-то странный ваш код
Офлайн
alexey_ghВ каком потоке?
никак я не могу отловить исключение в потоке
Офлайн
py.user.nextException in thread Thread-1:……
Офлайн
alexey_gh
Поправьте меня, как мне тогда отловить исключение fdb.fbcore.DatabaseError если except: должен отловить все исключения, но оно пролетает мимо.
try: conduit=Start1() except Exception: conduit.close()
Офлайн
alexey_ghИ где Thread-1 в этом коде, который ты выложил?
Exception in thread Thread-1:……
Отредактировано py.user.next (Сен. 25, 2020 20:15:45)
Офлайн
# -*- coding: utf-8 -*- import smtplib import fdb import os import threading import _thread from email.mime.text import MIMEText from email.header import Header def send_m(s): HOST = "......................" smtp_port=25 smtpObj = smtplib.SMTP(HOST, smtp_port) msg = MIMEText(s, 'plain', 'utf-8') msg['To'] = ".............." msg['From'] = ".........." msg['Subject'] = Header("............", 'utf-8') smtpObj.send_message(msg) def DB(): con = fdb.connect(dsn='............') return con def Start1(): try: print("Start") con=DB() conduit = con.event_conduit( ['EVENTS1','EVENTS2'] ) conduit.begin() e = conduit.wait() print (e) if e['EVENTS1']==1: cur = con.cursor() SELECT = ".............................." cur.execute(SELECT) rows = cur.fetchall() msg_t='.........................' print (msg_t) send_m(msg_t) if e['EVENTS2']==1: cur = con.cursor() SELECT = "..............." cur.execute(SELECT) rows = cur.fetchall() msg_t='........................' print (msg_t) send_m(msg_t) return conduit except: print("wait") def main(): while True: try: print("Начало") conduit=Start1() except: print("Repear") conduit.close() if __name__== '__main__': while True: try: main() except: print("Repair1")
Python 3.7.5 (tags/v3.7.5:5c02a39a0b, Oct 15 2019, 00:11:34) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license()" for more information. >>> ================ RESTART: C:\python\weight.py =============== Начало Start
Python 3.7.5 (tags/v3.7.5:5c02a39a0b, Oct 15 2019, 00:11:34) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license()" for more information. >>> ================ RESTART: C:\python\weight.py =============== Начало Start Exception in thread Thread-1: Traceback (most recent call last): File "C:\Python\Python37\lib\threading.py", line 926, in _bootstrap_inner self.run() File "C:\Python\Python37\lib\threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "C:\Python\Python37\lib\site-packages\fdb\fbcore.py", line 2154, in event_process events = data.count_and_reregister() File "C:\Python\Python37\lib\site-packages\fdb\fbcore.py", line 2079, in count_and_reregister self.__wait_for_events() File "C:\Python\Python37\lib\site-packages\fdb\fbcore.py", line 2065, in __wait_for_events "Error while waiting for events:") fdb.fbcore.DatabaseError: ('Error while waiting for events:\n- SQLCODE: 0\n- unknown ISC error 0', 0, 0)
Отредактировано alexey_gh (Сен. 28, 2020 11:02:57)
Офлайн
Ты всё это в IDE запускаешь или как?
Онлайн
Rodegastда. скрипт запускаю в IDLE
Ты всё это в IDE запускаешь или как?
Офлайн