Мне не удается перехватить OperationalError из SQLAlchemy - PullRequest
0 голосов
/ 15 апреля 2020

Это мой первый вопрос здесь, я надеюсь, что я сделаю это правильно. Если нет, пожалуйста, скажите мне, что я могу улучшить.

У меня есть база данных SqlAlchemy с моими книгами. Я сделал python приложение с ткинтером GUI. В этом GUI также можно ввести собственный запрос. Запрос должен быть исключен, и результат отображается в приложении. Поскольку можно отправить совершенно неправильный запрос, например: «lkjsdgf», я бы хотел уловить эту ситуацию. Я довольно новичок в программировании Python, и я много читал об обработке ошибок здесь на SO, а также на нескольких сайтах онлайн-обучения. Основываясь на информации, я ожидал бы, что этот код перехватит ошибку (чтобы быть уверенным, что я даже закончил, за исключением исключения как e):

import csv
import pandas as pd
from pandas import DataFrame
from sqlalchemy import create_engine
import sqlalchemy
import sqlite3

# This creates a SQLite :memory: database: 
engine = create_engine('sqlite://', echo=False)

# Here I simulate a wrong input from the user
zoek = "kjlk"

try:
    engine.execute(zoek).fetchall()
except OperationalError:
    print("Operational error")
except Exception as e:
    print(e)
    print("Unknown error")

Но вместо этого ошибка не перехватывается, и я получаю обширный след. Это (последняя) часть этого:

OperationalError: (sqlite3.OperationalError) возле "kjlk": синтаксическая ошибка
[SQL: kjlk] (фон этой ошибки: 1010 *http://sqlalche.me/e/e3q8)
Во время обработки вышеупомянутого исключения произошло еще одно исключение:
NameError Traceback (последний вызов
последний) в
13 try:
14 engine. execute (zoek) .fetchall ()
---> 15, кроме OperationalError:
16 print («Операционная ошибка»)
17, за исключением исключения как e: NameError: имя «OperationalError» не определено

Ссылка в тексте трассировки также мне не помогает, и я не смог найти ответ в SO, поэтому я решил задать новый вопрос. Я надеюсь, что смогу получить ответ здесь и узнать немного больше: «что я должен сделать, чтобы поймать ошибку (я)?»

...