Skip to content

Error Handling

The SDK provides specific exception types for different error scenarios.

Exception Hierarchy

BookalimoError (base)
├── BookalimoValidationError (input validation)
├── BookalimoRequestError (general request issues)
├── BookalimoConnectionError (network connectivity)
└── BookalimoHTTPError (HTTP status errors)
    └── BookalimoTimeout (408 timeouts)

Basic Error Handling

from bookalimo.exceptions import (
    BookalimoValidationError,
    BookalimoHTTPError,
    BookalimoTimeout,
    BookalimoConnectionError,
    BookalimoError,
)

try:
    async with AsyncBookalimo(credentials=creds) as client:
        quote = await client.pricing.quote(PriceRequest(...))
        booking = await client.reservations.book(
            BookRequest(
                token=quote.token,
                ...,
            )
        )

except BookalimoValidationError as e:
    print(f"Invalid input: {e.message}")
    for error in e.errors():
        print(f"  {error['loc']}: {error['msg']}")

except BookalimoHTTPError as e:
    if e.status_code == 401:
        print("Authentication failed")
    elif e.status_code == 400:
        print(f"Bad request: {e.payload}")
    else:
        print(f"API error {e.status_code}: {e}")

except BookalimoTimeout:
    print("Request timed out")

except BookalimoConnectionError:
    print("Network connectivity issue")

except BookalimoError as e:
    print(f"SDK error: {e}")

Common Scenarios

Invalid Location Data:

try:
    location = Location(type=LocationType.ADDRESS)  # Missing address
except BookalimoValidationError as e:
    print(f"Location validation failed: {e.message}")

Authentication Issues:

try:
    quote = await client.pricing.quote(PriceRequest(...))
except BookalimoHTTPError as e:
    if e.status_code == 401:
        print("Check your credentials")

Session Token Expired: ```python try: booking = await client.reservations.book( BookRequest(token="expired_token", ...) ) except BookalimoHTTPError as e: if e.status_code == 400 and "token" in str(e).lower(): print("Session expired - get new quote")