OpenBB-finance/OpenBB · warning · EmptyDataError
No data found for the given symbol(s).
Error message
No data found for the given symbol(s).
What it means
EmptyDataError raised when the ticker extraction loop for futures info completed without exceptions but appended zero results — meaning every get_ticker_data task returned nothing usable. It distinguishes 'the API answered but gave nothing' from the transport failure case (263).
Source
Thrown at openbb_platform/providers/deribit/openbb_deribit/models/futures_info.py:213
**kwargs: Any,
) -> list:
"""Extract data from the response."""
# pylint: disable=import-outside-toplevel
import asyncio # noqa
from openbb_core.provider.utils.errors import EmptyDataError, OpenBBError
from openbb_deribit.utils.helpers import get_ticker_data
result: list = []
symbols = query.symbol.split(",")
try:
tasks = [get_ticker_data(symbol) for symbol in symbols]
for task in asyncio.as_completed(tasks, timeout=10):
result.append(await task)
except Exception as e: # pylint: disable=broad-except
raise OpenBBError(f"Error fetching data: {e}") from e
if not result:
raise EmptyDataError("No data found for the given symbol(s).")
return sorted(result, key=lambda x: symbols.index(x["instrument_name"]))
@staticmethod
def transform_data(
query: DeribitFuturesInfoQueryParams,
data: list,
**kwargs: Any,
) -> list[DeribitFuturesInfoData]:
"""Transform the data."""
return [DeribitFuturesInfoData(**d) for d in data]
View on GitHub (pinned to 3e071fcc2c)
Solutions
- Re-fetch the instrument list (get_instruments) and re-confirm the symbol is still actively quoted.
- Use a perpetual (e.g. BTC-PERPETUAL) instead of dated contracts that expire.
- Treat EmptyDataError as a normal empty result in pipelines and skip/log rather than fail.
Defensive patterns
Strategy: try-catch
Validate before calling
# confirm the instrument is still actively quoted before the ticker call
from openbb_deribit.utils.helpers import get_instruments
names = {d["instrument_name"] for d in asyncio.run(get_instruments("all", "future"))}
symbols = [s for s in symbols if s in names] # drop expired/rolled contracts Try / catch
from openbb_core.provider.utils.errors import EmptyDataError
try:
res = obb.derivatives.futures.info(symbol=s, provider="deribit")
except EmptyDataError:
res = None # contract likely expired between validation and fetch; refresh list Prevention
- Don't cache instrument lists across expiry/roll boundaries.
- Prefer perpetuals for repeated monitoring jobs.
- Handle EmptyDataError as an expected branch in schedulers.
When it happens
Trigger: All requested symbols resolved to instruments Deribit no longer returns ticker data for (just-expired contracts), or responses that were empty result objects. Because symbols were already validated in the query model, this path is rare and usually means the instrument expired between validation and the ticker call.
Common situations: Querying a contract on its expiry day, or a job that cached a symbol list hours/days earlier and replays it after Deribit rolled contracts.
Related errors
- OpenBBError(response.get("error"))
- Symbol is required.
- No data found.
- All requests returned empty with no error messages.
- Failed to get ticker data -> {e}: {e.args[0]}
AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14).
Data as JSON: /api/errors/a2fc2fdba858b7b1.
Report an issue: GitHub.