OpenBB-finance/OpenBB · error · ValueError

Invalid frequency: '{frequency}' for factor: '{factor}' in r

Error message

Invalid frequency: '{frequency}' for factor: '{factor}' in region: '{region}'. Valid frequencies are: {", ".join(intervals.keys())}

What it means

Fama-French factors query-model validator: each (region, factor) pair supports only certain sampling frequencies (daily/monthly/annual depending on the file), stored in FACTOR_REGION_MAP[region]['intervals'][factor]. Supplying a frequency not in that dict raises this ValueError before any request is made.

Source

Thrown at openbb_platform/providers/famafrench/openbb_famafrench/models/factors.py:145

            raise ValueError(
                f"Invalid region: '{region}'. "
                + "Valid regions are: "
                + ", ".join(FACTOR_REGION_MAP.keys())
            )

        regional_factors = FACTOR_REGION_MAP[region]

        if factor not in regional_factors.get("factors", {}):
            raise ValueError(
                f"Invalid factor: '{factor}' for region: '{region}'. "
                + "Valid factors are: "
                + ", ".join(regional_factors.get("factors", {}).keys())
            )

        if frequency:
            intervals = regional_factors.get("intervals", {}).get(factor, {})
            if frequency not in list(intervals):
                raise ValueError(
                    f"Invalid frequency: '{frequency}' for factor: '{factor}'"
                    + f" in region: '{region}'. "
                    + "Valid frequencies are: "
                    + ", ".join(intervals.keys())
                )

        return values


class FamaFrenchFactorsData(Data):
    """Fama-French Factors Data.

    Source: https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html
    """

    __alias_dict__ = {
        "date": "Date",
        "mkt_rf": "Mkt-RF",

View on GitHub (pinned to 3e071fcc2c)

Solutions

  1. Use a frequency from the error message (intervals for that region+factor).
  2. Derive allowed frequencies from FACTOR_REGION_MAP[region]['intervals'][factor] before presenting choices.
  3. Most factor files are at least daily and monthly — fall back to one of those.

Example fix

# before
query = {'region': 'america', 'factor': '3_factors', 'frequency': 'weekly'}

# after
query = {'region': 'america', 'factor': '3_factors', 'frequency': 'monthly'}
Defensive patterns

Strategy: validation

Validate before calling

from openbb_famafrench.models.factors import FACTOR_REGION_MAP

def freqs_for(region: str, factor: str) -> list[str]:
    return list(FACTOR_REGION_MAP.get(region, {}).get('intervals', {}).get(factor, {}))

def freq_ok(region: str, factor: str, frequency: str) -> bool:
    return frequency in freqs_for(region, factor)

Try / catch

try:
    res = await obb.economy.famafrench.factors(factor=f, region=r, frequency=frq, provider='famafrench')
except ValueError as e:
    if 'Valid frequencies are' in str(e):
        frq = freqs_for(r, f)[0]
        res = await obb.economy.famafrench.factors(factor=f, region=r, frequency=frq, provider='famafrench')
    else:
        raise

Prevention

When it happens

Trigger: frequency='annual' for a factor file published only daily/monthly; frequency='weekly' (rarely available anywhere); mixing a frequency that works for one factor with another factor in the same region.

Common situations: Assuming all factors offer all frequencies; defaulting jobs to annual without checking file availability; UIs with a static frequency dropdown.

Related errors


AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14). Data as JSON: /api/errors/4b7fd5cfda2389bc. Report an issue: GitHub.