Skip to content

Exceptions API Reference

All exceptions inherit from StockFeedError and support optional provider, ticker, and suggestion fields for actionable error messages.

Exception hierarchy

StockFeedError
├── ProviderError
│   ├── ProviderAuthError          # Invalid/missing API key
│   ├── ProviderRateLimitError     # Rate limit hit (.retry_after: float | None)
│   ├── ProviderUnavailableError   # Provider down or timeout
│   └── TickerNotFoundError        # Ticker doesn't exist on provider
├── CacheError
│   ├── CacheReadError
│   └── CacheWriteError
├── ValidationError                # Bad user input
├── UnsupportedIntervalError       # Provider doesn't support the interval
├── ConfigurationError             # Missing/invalid config
└── DevModeError                   # Dev-only feature used outside dev mode

Reference

Full exception hierarchy for stockfeed.

StockFeedError

Bases: Exception

Base exception for all stockfeed errors.

Source code in src/stockfeed/exceptions.py
class StockFeedError(Exception):
    """Base exception for all stockfeed errors."""

    def __init__(
        self,
        message: str,
        provider: str | None = None,
        ticker: str | None = None,
        suggestion: str | None = None,
    ) -> None:
        self.message = message
        self.provider = provider
        self.ticker = ticker
        self.suggestion = suggestion
        super().__init__(message)

    def __str__(self) -> str:
        parts = [self.message]
        if self.provider:
            parts.append(f"provider={self.provider}")
        if self.ticker:
            parts.append(f"ticker={self.ticker}")
        if self.suggestion:
            parts.append(f"suggestion={self.suggestion}")
        return " | ".join(parts)

ProviderError

Bases: StockFeedError

Raised when a provider encounters an error.

Source code in src/stockfeed/exceptions.py
class ProviderError(StockFeedError):
    """Raised when a provider encounters an error."""

ProviderAuthError

Bases: ProviderError

Invalid or missing API key.

Source code in src/stockfeed/exceptions.py
class ProviderAuthError(ProviderError):
    """Invalid or missing API key."""

ProviderRateLimitError

Bases: ProviderError

Rate limit hit for a provider.

Source code in src/stockfeed/exceptions.py
class ProviderRateLimitError(ProviderError):
    """Rate limit hit for a provider."""

    def __init__(
        self,
        message: str,
        provider: str | None = None,
        ticker: str | None = None,
        suggestion: str | None = None,
        retry_after: float | None = None,
    ) -> None:
        super().__init__(message, provider=provider, ticker=ticker, suggestion=suggestion)
        self.retry_after = retry_after

ProviderUnavailableError

Bases: ProviderError

Provider is down or timed out.

Source code in src/stockfeed/exceptions.py
class ProviderUnavailableError(ProviderError):
    """Provider is down or timed out."""

TickerNotFoundError

Bases: ProviderError

Ticker doesn't exist on this provider.

Source code in src/stockfeed/exceptions.py
class TickerNotFoundError(ProviderError):
    """Ticker doesn't exist on this provider."""

CacheError

Bases: StockFeedError

Raised when a cache operation fails.

Source code in src/stockfeed/exceptions.py
class CacheError(StockFeedError):
    """Raised when a cache operation fails."""

CacheReadError

Bases: CacheError

Raised when reading from cache fails.

Source code in src/stockfeed/exceptions.py
class CacheReadError(CacheError):
    """Raised when reading from cache fails."""

CacheWriteError

Bases: CacheError

Raised when writing to cache fails.

Source code in src/stockfeed/exceptions.py
class CacheWriteError(CacheError):
    """Raised when writing to cache fails."""

ValidationError

Bases: StockFeedError

Bad user input (ticker format, date range, etc.).

Source code in src/stockfeed/exceptions.py
class ValidationError(StockFeedError):
    """Bad user input (ticker format, date range, etc.)."""

UnsupportedIntervalError

Bases: StockFeedError

Provider doesn't support the requested interval.

Source code in src/stockfeed/exceptions.py
class UnsupportedIntervalError(StockFeedError):
    """Provider doesn't support the requested interval."""

ConfigurationError

Bases: StockFeedError

Missing or invalid configuration.

Source code in src/stockfeed/exceptions.py
class ConfigurationError(StockFeedError):
    """Missing or invalid configuration."""

DevModeError

Bases: StockFeedError

Dev-only feature used in non-dev context.

Source code in src/stockfeed/exceptions.py
class DevModeError(StockFeedError):
    """Dev-only feature used in non-dev context."""