Вывести сообщение об ошибке при выполнении запроса

import pymysql, pymysql.cursors


class DB:
    def __init__(self):
        try:
            self.conn = pymysql.connect(host='localhost', user='zuldek', passwd='123Hk78', db='YouBlogs',
                                        charset='utf8', cursorclass=pymysql.cursors.DictCursor)
            self.cursor = self.conn.cursor()
        except mysql.connector.Error as err:
            print("Error code:" + str(err.errno))  # error number
            print("SQLSTATE value:" + str(err.sqlstate))  # SQLSTATE value
            print("Error message:" + str(err.msg))  # error message
            print("Error:" + str(err))  # errno, sqlstate, msg values

    def query(self, ql):
        self.cursor.execute(ql)
        return self.cursor.fetchall()

    def super_query(self, ql):
        self.cursor.execute(ql)
        return self.cursor.fetchone()

    def update(self, ql):
        self.cursor.execute(ql)
        self.conn.commit()

    def close(self):
        self.conn.close()


SQL = DB()

lis = SQL.query("SELECT * FROM sss")

Как верно прописать 'try', так чтобы выводил ошибку при выполнении запроса(если ошибка в запросе), либо при подключении. В целом ловить любую ошибку, чтобы в дальнейшем записать ее в файл


Ответы (1 шт):

Автор решения: Roman-Stop RU aggression in UA

Если такого рода ошибка случилась, ваша программа вряд ли что-то сможет сделать дальше, только вывести ошибку и выйти, так что ловить исключение в метод не особо имеет смысл. Нужно обрабатывать ошибку на самом верху.

Можно все поместить в отдельную функцию и ее вызов main в try...except. Причем можно добавлять несколько блоков except для разных исключений, чтоб можно было выводить специфическую информацию для конкретного типа. А самый последний блок except имеет смысл сделать общим, т.е. чтоб он отлавливал все исключения.

import pymysql, pymysql.cursors


class DB:
    # в методах никаких исключений не обрабатываем
    # для примера
    def __init__(self):
        self.conn = pymysql.connect(host='localhost', user='zuldek', passwd='123Hk78', db='YouBlogs',
                                        charset='utf8', cursorclass=pymysql.cursors.DictCursor)
        self.cursor = self.conn.cursor()
     
     ... другие методы

def main():
    SQL = DB()

    lis = SQL.query("SELECT * FROM sss")

if __name__ == '__main__':
    try:
        main()
    except mysql.connector.Error as err: # обработка исключений при работе с БД
        print("Error code:" + str(err.errno))  # error number
        print("SQLSTATE value:" + str(err.sqlstate))  # SQLSTATE value
        print("Error message:" + str(err.msg))  # error message
        print("Error:" + str(err))  # errno, sqlstate, msg values
    except Exception as e:               # это отловит все остальные исключения
        print("Error : + str(e))
→ Ссылка