Как перехватить исключение, специфичное для пакета? ⇐ Python
-
Anonymous
Как перехватить исключение, специфичное для пакета?
Когда я пытаюсь прочитать таблицу из базы данных SQL с помощью pandas, используя pandas.read_sql, пакет pyodbc выдает DataError (pyodbc.DataError), который мне нужен ловить. Ошибка DataError вызвана неожиданным значением nvarchar, что приводит к сбою преобразования, когда pyodbc пытается преобразовать его в тип данных int.
Это мой код:
импортировать панд как pd импортировать pyodbc из импорта sqlalchemy create_engine из URL-адреса импорта sqlalchemy.engine драйвер = "SQL-сервер" сервер = "мой_сервер" база данных = "my_db" Connection_string = (f"Driver={driver};" f"Сервер={сервер};" f"База данных={база данных};" f"Trusted_Connection=да;" е"TrustServerCertificate=да") Connection_url = URL.create("mssql+pyodbc", запрос = {"odbc_connect": Connection_string}) двигатель = create_engine(connection_url) # выбираем только первые 10 строк таблицы запрос = (f"ВЫБРАТЬ первые 10 *" f"FROM abc.table_name") df = pd.read_sql(sql=запрос, кон=двигатель) Выход
DataError: (pyodbc.DataError) ('22018', "[22018] [Microsoft][Драйвер ODBC SQL Server][SQL Server]Ошибка преобразования при преобразовании значения nvarchar '00:35' в тип данных целое (245) (SQLExecDirectW)") [SQL: ВЫБРАТЬ топ-10 * FROM abc.table_name] (История этой ошибки: https://sqlalche.me/e/14/9h9h) Я знаю, как перехватывать и обрабатывать встроенные исключения с помощью операторов try и Exception в Python. Однако DataError (pyodbc.DataError) не является встроенным исключением. Я хотел бы перехватить эту ошибку, специфичную для пакета, а не просто перехватывать любую ошибку (я понимаю, что это плохая практика).
Я попытался сделать следующее:
попробуйте: df = pd.read_sql(sql=запрос, кон=двигатель) кроме DataError как ошибки: распечатать (ошибиться) проходить Это приводит к ошибке NameError: имя 'DataError' не определено (насколько я понимаю, поскольку DataError не является встроенным исключением).
р>
Я также пытался сделать следующее:
попробуйте: df = pd.read_sql(sql=запрос, кон=двигатель) кроме pyodbc.DataError как ошибки: распечатать (ошибиться) проходить Это приводит к DataError: (pyodbc.DataError), поскольку ошибка не перехватывается.
Когда я пытаюсь прочитать таблицу из базы данных SQL с помощью pandas, используя pandas.read_sql, пакет pyodbc выдает DataError (pyodbc.DataError), который мне нужен ловить. Ошибка DataError вызвана неожиданным значением nvarchar, что приводит к сбою преобразования, когда pyodbc пытается преобразовать его в тип данных int.
Это мой код:
импортировать панд как pd импортировать pyodbc из импорта sqlalchemy create_engine из URL-адреса импорта sqlalchemy.engine драйвер = "SQL-сервер" сервер = "мой_сервер" база данных = "my_db" Connection_string = (f"Driver={driver};" f"Сервер={сервер};" f"База данных={база данных};" f"Trusted_Connection=да;" е"TrustServerCertificate=да") Connection_url = URL.create("mssql+pyodbc", запрос = {"odbc_connect": Connection_string}) двигатель = create_engine(connection_url) # выбираем только первые 10 строк таблицы запрос = (f"ВЫБРАТЬ первые 10 *" f"FROM abc.table_name") df = pd.read_sql(sql=запрос, кон=двигатель) Выход
DataError: (pyodbc.DataError) ('22018', "[22018] [Microsoft][Драйвер ODBC SQL Server][SQL Server]Ошибка преобразования при преобразовании значения nvarchar '00:35' в тип данных целое (245) (SQLExecDirectW)") [SQL: ВЫБРАТЬ топ-10 * FROM abc.table_name] (История этой ошибки: https://sqlalche.me/e/14/9h9h) Я знаю, как перехватывать и обрабатывать встроенные исключения с помощью операторов try и Exception в Python. Однако DataError (pyodbc.DataError) не является встроенным исключением. Я хотел бы перехватить эту ошибку, специфичную для пакета, а не просто перехватывать любую ошибку (я понимаю, что это плохая практика).
Я попытался сделать следующее:
попробуйте: df = pd.read_sql(sql=запрос, кон=двигатель) кроме DataError как ошибки: распечатать (ошибиться) проходить Это приводит к ошибке NameError: имя 'DataError' не определено (насколько я понимаю, поскольку DataError не является встроенным исключением).
р>
Я также пытался сделать следующее:
попробуйте: df = pd.read_sql(sql=запрос, кон=двигатель) кроме pyodbc.DataError как ошибки: распечатать (ошибиться) проходить Это приводит к DataError: (pyodbc.DataError), поскольку ошибка не перехватывается.