Исключение ArgumentError
Исключение ArgumentError наследуется от
SQLAlchemyError
и возбуждается, когда в функцию или метод библиотеки
передан некорректный аргумент. Обычно это происходит,
когда аргумент имеет неверный тип, недопустимое
значение или вовсе не может быть обработан SQLAlchemy.
Исключение не связано с ошибками базы данных -
оно возникает ещё до отправки SQL-запроса.
Синтаксис
from sqlalchemy.exc import ArgumentError
raise ArgumentError("message")
Пример
Давайте создадим движок с некорректным URL, который невозможно разобрать:
from sqlalchemy import create_engine
from sqlalchemy.exc import ArgumentError
try:
engine = create_engine('not a valid url')
except ArgumentError as exc:
print(type(exc).__name__)
print(exc)
Результат выполнения кода:
"ArgumentError"
"Could not parse SQLAlchemy URL from string 'not a valid url'"
Пример
Давайте передадим в create_engine
неверный тип аргумента - число вместо строки:
from sqlalchemy import create_engine
from sqlalchemy.exc import ArgumentError
try:
engine = create_engine(123)
except ArgumentError as exc:
print(type(exc).__name__)
print(exc)
Результат выполнения кода:
"ArgumentError"
"Expected string or URL object, got 123"
Пример
Давайте попробуем создать модель с некорректным
именем таблицы, передав в __tablename__
неверное значение:
from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from sqlalchemy.exc import ArgumentError
class Base(DeclarativeBase):
pass
try:
class Article(Base):
__tablename__ = None
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
except ArgumentError as exc:
print(type(exc).__name__)
print(exc)
Результат выполнения кода:
"ArgumentError"
"Table None is already defined for this MetaData instance."
Пример
Давайте передадим в метод execute
объект, который не является ни строкой,
ни исполняемым выражением:
from sqlalchemy import create_engine
from sqlalchemy.exc import ArgumentError
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
try:
conn.execute(123)
except ArgumentError as exc:
print(type(exc).__name__)
print(exc)
Результат выполнения кода:
"ArgumentError"
"Executable expected, got 123"
Смотрите также
-
класс
SQLAlchemyError,
базовый класс всех исключений SQLAlchemy -
исключение
InvalidRequestError,
которое сигнализирует о некорректном запросе -
исключение
ProgrammingError,
которое возбуждается при ошибках программирования -
исключение
StatementError,
которое оборачивает ошибки исполнения выражений