Skip to main content

Error Handling

All SDK exceptions inherit from QarionError and carry structured information about the failure.

Exception Hierarchy​

Exception Reference​

ExceptionHTTP StatusWhen It's Raised
QarionError—Base class for all SDK errors
AuthenticationError401Invalid or missing API key
PermissionDeniedError403Insufficient permissions for the operation
NotFoundError404Resource does not exist
ValidationError400 / 422Invalid request payload
ConflictError409Resource conflict (e.g., duplicate slug)
ServerError5xxPlatform-side failure
TimeoutError—Request exceeded the configured timeout

Error Attributes​

Every exception carries two useful attributes:

AttributeTypeDescription
status_codeint | NoneHTTP status code (if applicable)
detailAnyDetailed error info from the API response

Usage Patterns​

Catching Specific Errors​

from qarion import QarionClient, NotFoundError, AuthenticationError, ValidationError

async with QarionClient(api_key="qk_...") as client:
try:
product = await client.products.get("my-space", "nonexistent")
except NotFoundError as e:
print(f"Not found (HTTP {e.status_code}): {e.detail}")
except AuthenticationError:
print("Invalid API key")
except ValidationError as e:
print(f"Bad request: {e.detail}")

Catching All SDK Errors​

from qarion import QarionClient, QarionError

async with QarionClient() as client:
try:
result = await client.quality.trigger("my-space", "check-slug")
except QarionError as e:
print(f"SDK error [{e.status_code}]: {e}")

Retry on Conflict​

from qarion import QarionSyncClient, ConflictError

with QarionSyncClient() as client:
try:
product = client.products.create(
"my-space", name="My Product", slug="my-product"
)
except ConflictError:
# Slug already exists — fetch the existing product instead
product = client.products.get("my-space", "my-product")

Imports​

All exceptions are importable from the top-level package:

from qarion import (
QarionError,
AuthenticationError,
PermissionDeniedError,
NotFoundError,
ValidationError,
ConflictError,
ServerError,
TimeoutError,
)