Skip to content

Errors

Exception classes for API errors.

kwork_api.errors

Исключения Kwork API.

Все исключения предоставляют понятные сообщения для отладки. Иерархия исключений:

KworkError (базовое)
├── KworkAuthError (ошибки аутентификации)
├── KworkApiError (HTTP ошибки API)
│   ├── KworkNotFoundError (404)
│   ├── KworkRateLimitError (429)
│   └── KworkValidationError (400)
└── KworkNetworkError (ошибки сети)

Classes

KworkApiError

KworkApiError(message, status_code=None, response=None)

Bases: KworkError

Ошибка HTTP запроса к API (4xx, 5xx).

Базовый класс для HTTP ошибок API. Содержит код статуса.

Attributes:

Name Type Description
status_code

HTTP код ответа (400, 404, 500, etc.)

Example

try: await client.catalog.get_details(999999) except KworkApiError as e: print(f"HTTP {e.status_code}: {e.message}")

Source code in src/kwork_api/errors.py
84
85
86
87
88
89
90
91
def __init__(
    self,
    message: str,
    status_code: Optional[int] = None,
    response: Optional[Any] = None,
):
    self.status_code = status_code
    super().__init__(message, response)

KworkAuthError

KworkAuthError(
    message="Authentication failed", response=None
)

Bases: KworkError

Ошибка аутентификации/авторизации.

Возникает при: - Неверном логине или пароле - Истёкшем или невалидном токене - Отсутствии прав доступа (403)

Example

try: client = await KworkClient.login("user", "wrong_password") except KworkAuthError: print("Неверные учётные данные")

Source code in src/kwork_api/errors.py
61
62
def __init__(self, message: str = "Authentication failed", response: Optional[Any] = None):
    super().__init__(message, response)

KworkError

KworkError(message, response=None)

Bases: Exception

Базовое исключение для всех ошибок Kwork API.

Все остальные исключения наследуются от этого класса.

Attributes:

Name Type Description
message

Сообщение об ошибке.

response

Оригинальный HTTP response (если есть).

Example

try: await client.catalog.get_list() except KworkError as e: print(f"Ошибка: {e.message}")

Source code in src/kwork_api/errors.py
36
37
38
39
def __init__(self, message: str, response: Optional[Any] = None):
    self.message = message
    self.response = response
    super().__init__(self.message)

KworkNetworkError

KworkNetworkError(message='Network error', response=None)

Bases: KworkError

Ошибка сети/подключения.

Возникает при: - Отсутствии соединения - Таймауте запроса - Ошибке DNS - Проблемах с SSL

Example

try: await client.catalog.get_list() except KworkNetworkError: print("Проверьте подключение к интернету")

Source code in src/kwork_api/errors.py
188
189
def __init__(self, message: str = "Network error", response: Optional[Any] = None):
    super().__init__(message, response)

KworkNotFoundError

KworkNotFoundError(resource, response=None)

Bases: KworkApiError

Ресурс не найден (404).

Возникает при запросе несуществующего кворка, пользователя или другого ресурса.

Example

try: await client.catalog.get_details(999999) except KworkNotFoundError: print("Кворк не найден")

Source code in src/kwork_api/errors.py
113
114
def __init__(self, resource: str, response: Optional[Any] = None):
    super().__init__(f"Resource not found: {resource}", 404, response)

KworkRateLimitError

KworkRateLimitError(
    message="Rate limit exceeded", response=None
)

Bases: KworkApiError

Превышен лимит запросов (429).

Возникает при слишком частых запросах к API. Рекомендуется сделать паузу перед повторным запросом.

Example

import asyncio

try: await client.catalog.get_list() except KworkRateLimitError: await asyncio.sleep(5) # Пауза 5 секунд

Source code in src/kwork_api/errors.py
133
134
def __init__(self, message: str = "Rate limit exceeded", response: Optional[Any] = None):
    super().__init__(message, 429, response)

KworkValidationError

KworkValidationError(
    message="Validation failed", fields=None, response=None
)

Bases: KworkApiError

Ошибка валидации (400).

Возникает при некорректных данных запроса.

Attributes:

Name Type Description
fields

Словарь ошибок по полям {field: [errors]}.

Example

try: await client.catalog.get_list(page=-1) except KworkValidationError as e: if e.fields: for field, errors in e.fields.items(): print(f"{field}: {errors[0]}")

Source code in src/kwork_api/errors.py
155
156
157
158
159
160
161
162
def __init__(
    self,
    message: str = "Validation failed",
    fields: Optional[dict[str, list[str]]] = None,
    response: Optional[Any] = None,
):
    self.fields = fields or {}
    super().__init__(message, 400, response)