Skip to content

Error Handling

All SDK exceptions inherit from NetorcaBaseException, so you can catch everything with a single handler or handle specific cases individually.

Quick example

from netorca_sdk import NetOrcaClient
from netorca_sdk.exceptions import NetorcaAuthenticationError, NetorcaNotFoundError, NetorcaAPIError

try:
    client = NetOrcaClient(fqdn="...", api_key="YOUR_API_KEY")
    item = client.service_items.get(123)
except NetorcaAuthenticationError:
    print("Invalid API key")
except NetorcaNotFoundError:
    print("Resource not found")
except NetorcaAPIError as e:
    print(f"API error: {e}")

Exception reference

Exception HTTP Status When raised
NetorcaAuthenticationError 401 API key is invalid or expired
NetorcaNotFoundError 404 The requested resource does not exist
NetorcaAPIError 400 / 403 / 4xx / 5xx Any other non-2xx API response (including access denied)
NetorcaServerUnavailableError 503 NetOrca API is temporarily unavailable
NetorcaGatewayError 502 Gateway or proxy error upstream of the API
NetorcaTimeoutError — Request exceeded the timeout limit
NetorcaValueError — Invalid value passed to an SDK method
NetorcaPermissionError — Permission denied (raised by application logic)
NetorcaException — General SDK usage error (bad input, missing config)
NetorcaBaseException — Base class — catches all of the above

All exceptions can be imported from either netorca_sdk or netorca_sdk.exceptions:

# Both are equivalent
from netorca_sdk import NetorcaAuthenticationError
from netorca_sdk.exceptions import NetorcaAuthenticationError

Catching all SDK errors

from netorca_sdk.exceptions import NetorcaBaseException

try:
    results = submission.submit()
except NetorcaBaseException as e:
    print(f"NetOrca error: {e}")
    sys.exit(1)

Handling submission errors

validate() and submit() do not raise exceptions on validation failures — they return (False, errors) instead. Exceptions are reserved for connectivity and authentication problems.

ok, errors = submission.validate(pretty_print=True)
if not ok:
    # errors is a dict of {app_name: {service: reasons}}
    for app, details in errors.items():
        print(f"App '{app}' failed: {details}")
    sys.exit(1)