microsoft/qlib · warning · ValueError

get data error: {symbol}--{start_}--{end_}The stock may be d

Error message

get data error: {symbol}--{start_}--{end_}The stock may be delisted, please check

What it means

Raised inside _get_simple of YahooCollector.get_data (scripts/data_collector/yahoo/collector.py:166) when get_data_from_remote returns None or an empty DataFrame for the requested symbol/window. The message points at the most common cause — a delisted/invalid ticker — but any upstream empty response (rate limit, bad date range, suspended stock) triggers it. The @deco_retry wrapper retries first; for INTERVAL_1d the outer code swallows this ValueError (except: pass) and returns an empty DataFrame, while the 1min loop also tolerates it per 7-day chunk.

Source

Thrown at scripts/data_collector/yahoo/collector.py:166

                f"get data error: {symbol}--{start}--{end}"
                + "Your data request fails. This may be caused by your firewall (e.g. GFW). Please switch your network if you want to access Yahoo! data"
            )

    def get_data(
        self, symbol: str, interval: str, start_datetime: pd.Timestamp, end_datetime: pd.Timestamp
    ) -> pd.DataFrame:
        @deco_retry(retry_sleep=self.delay, retry=self.retry)
        def _get_simple(start_, end_):
            self.sleep()
            _remote_interval = "1m" if interval == self.INTERVAL_1min else interval
            resp = self.get_data_from_remote(
                symbol,
                interval=_remote_interval,
                start=start_,
                end=end_,
            )
            if resp is None or resp.empty:
                raise ValueError(
                    f"get data error: {symbol}--{start_}--{end_}" + "The stock may be delisted, please check"
                )
            return resp

        _result = None
        if interval == self.INTERVAL_1d:
            try:
                _result = _get_simple(start_datetime, end_datetime)
            except ValueError as e:
                pass
        elif interval == self.INTERVAL_1min:
            _res = []
            _start = self.start_datetime
            while _start < self.end_datetime:
                _tmp_end = min(_start + pd.Timedelta(days=7), self.end_datetime)
                try:
                    _resp = _get_simple(_start, _tmp_end)
                    _res.append(_resp)

View on GitHub (pinned to 79633dd950)

Solutions

  1. Verify the symbol trades on Yahoo Finance (finance.yahoo.com search) and matches the expected format for the collector subclass.
  2. Clamp start/end to the ticker's listing period, or drop the ticker from the batch.
  3. If it is a genuine data hole for a live ticker, rerun later — transient yahooquery throttling can also return empty.
  4. When calling get_data directly, wrap with try/except ValueError and treat empty as 'no data', matching the collector's own 1d behavior.

Example fix

# before
df = collector.get_data(symbol, interval='1d', start_datetime=s, end_datetime=e)

# after
try:
    df = collector.get_data(symbol, interval='1d', start_datetime=s, end_datetime=e)
except ValueError as e:
    print(f'skip {symbol}: {e}')  # likely delisted / no data in window
    df = pd.DataFrame()
Defensive patterns

Strategy: try-catch

Try / catch

try:
    df = collector.get_data(symbol, interval='1d', start_datetime=s, end_datetime=e)
except ValueError as e:
    if 'may be delisted' in str(e):
        df = pd.DataFrame()  # treat as no-data, mirror the collector's own 1d handling
    else:
        raise

Prevention

When it happens

Trigger: Requesting bars for a symbol yahooquery has no data on: delisted tickers, wrong symbol format for the region (suffix mapping), date ranges entirely outside the listing period, or empty responses after retries. For 1d the exception is caught upstream, so users mostly see it when calling get_data directly or as silent empty results.

Common situations: Bulk-collecting a universe that includes delisted/renamed tickers (e.g. old SP500 constituents); symbols normalized incorrectly (suffix/prefix mismatch); start/end dates in the future or before IPO.

Related errors


AI-assisted analysis of microsoft/qlib@79633dd950 (2026-08-15). Data as JSON: /api/errors/3b2b90f342ee85b8. Report an issue: GitHub.