{"record":{"id":"a2fc2fdba858b7b1","repo":"OpenBB-finance/OpenBB","slug":"no-data-found-for-the-given-symbol-s","errorCode":null,"errorMessage":"No data found for the given symbol(s).","messagePattern":"No data found for the given symbol\\(s\\)\\.","errorType":"exception","errorClass":"EmptyDataError","httpStatus":null,"severity":"warning","filePath":"openbb_platform/providers/deribit/openbb_deribit/models/futures_info.py","lineNumber":213,"sourceCode":"        **kwargs: Any,\n    ) -> list:\n        \"\"\"Extract data from the response.\"\"\"\n        # pylint: disable=import-outside-toplevel\n        import asyncio  # noqa\n        from openbb_core.provider.utils.errors import EmptyDataError, OpenBBError\n        from openbb_deribit.utils.helpers import get_ticker_data\n\n        result: list = []\n        symbols = query.symbol.split(\",\")\n        try:\n            tasks = [get_ticker_data(symbol) for symbol in symbols]\n            for task in asyncio.as_completed(tasks, timeout=10):\n                result.append(await task)\n        except Exception as e:  # pylint: disable=broad-except\n            raise OpenBBError(f\"Error fetching data: {e}\") from e\n\n        if not result:\n            raise EmptyDataError(\"No data found for the given symbol(s).\")\n\n        return sorted(result, key=lambda x: symbols.index(x[\"instrument_name\"]))\n\n    @staticmethod\n    def transform_data(\n        query: DeribitFuturesInfoQueryParams,\n        data: list,\n        **kwargs: Any,\n    ) -> list[DeribitFuturesInfoData]:\n        \"\"\"Transform the data.\"\"\"\n        return [DeribitFuturesInfoData(**d) for d in data]\n","sourceCodeStart":195,"sourceCodeEnd":225,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/deribit/openbb_deribit/models/futures_info.py#L195-L225","documentation":"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).","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"# confirm the instrument is still actively quoted before the ticker call\nfrom openbb_deribit.utils.helpers import get_instruments\nnames = {d[\"instrument_name\"] for d in asyncio.run(get_instruments(\"all\", \"future\"))}\nsymbols = [s for s in symbols if s in names]  # drop expired/rolled contracts","typeGuard":null,"tryCatchPattern":"from openbb_core.provider.utils.errors import EmptyDataError\ntry:\n    res = obb.derivatives.futures.info(symbol=s, provider=\"deribit\")\nexcept EmptyDataError:\n    res = None  # contract likely expired between validation and fetch; refresh list","preventionTips":["Don't cache instrument lists across expiry/roll boundaries.","Prefer perpetuals for repeated monitoring jobs.","Handle EmptyDataError as an expected branch in schedulers."],"tags":["deribit","no-data","ticker","expired-contract"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}