OpenBB-finance/OpenBB · error · ValueError
Only annual frequency is available for 'ratios' measure.
Error message
Only annual frequency is available for 'ratios' measure.
What it means
Raised by get_international_portfolio_data when frequency='monthly' and measure='ratios'. In the international datasets the USD/local ratios table only exists at annual frequency, so the combination is rejected outright.
Source
Thrown at openbb_platform/providers/famafrench/openbb_famafrench/utils/helpers.py:737
In most scenarios, there will only be 1 DataFrame and 1 metadata dictionary.
Raises
------
ValueError
When an invalid combination of parameters or unsupported values are supplied.
"""
measure = measure.lower() if measure is not None else "usd"
data = get_international_portfolio_data(index, country, dividends)
tables = read_dat_file(data)
dataframes, metadata = process_international_portfolio_data(tables, dividends)
if measure and measure not in ["usd", "local", "ratios"]:
raise ValueError(
f"Measure {measure} not supported. Choose from 'usd', 'local', or 'ratios'."
)
if frequency == "monthly" and measure == "ratios":
raise ValueError("Only annual frequency is available for 'ratios' measure.")
if frequency:
dfs = [
df
for df, meta in zip(dataframes, metadata)
if meta["frequency"] == frequency
]
dfs_meta = [meta for meta in metadata if meta["frequency"] == frequency]
else:
dfs = dataframes
dfs_meta = metadata
if measure == "local":
dfs = [df for df, meta in zip(dfs, dfs_meta) if "Local" in meta["description"]]
dfs_meta = [meta for meta in dfs_meta if "Local" in meta["description"]]
elif measure == "usd":
dfs = [df for df, meta in zip(dfs, dfs_meta) if "Dollar" in meta["description"]]
dfs_meta = [meta for meta in dfs_meta if "Dollar" in meta["description"]]View on GitHub (pinned to 3e071fcc2c)
Solutions
- Set frequency='annual' when measure='ratios'.
- Leave frequency unset if you only care about ratios (the annual tables are the ones kept).
- In dashboards, disable the monthly option whenever the ratios measure is selected.
Example fix
// before obb.economy.famafrench.international_index_returns(country='Japan', measure='ratios', frequency='monthly') // after obb.economy.famafrench.international_index_returns(country='Japan', measure='ratios', frequency='annual')
Defensive patterns
Strategy: validation
Validate before calling
if measure == 'ratios':
assert frequency in (None, 'annual'), "ratios measure supports annual frequency only" Prevention
- Disable the monthly option in UIs whenever the ratios measure is selected.
- Keep a per-endpoint compatibility matrix of measure x frequency instead of one shared config.
When it happens
Trigger: Calling international index/country returns with measure='ratios' and frequency='monthly' (explicitly or via a defaulted parameter).
Common situations: Reusing a generic 'monthly' default across all famafrench calls; not noticing the ratios sheet in the zip is annual-only.
Related errors
- Measure '{measure}' is only available for monthly frequency.
- Invalid frequency: '{frequency}' for factor: '{factor}' in r
- Measure {measure} not supported. Choose from 'usd', 'local',
- Frequency {frequency} not supported. Choose from 'monthly',
- Measure {measure} not supported. Choose from 'value', 'equal
AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14).
Data as JSON: /api/errors/37a35428fd351eef.
Report an issue: GitHub.