You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

forex_python报错Currency Rates source not ready及返回NaN问题咨询

报错诱因

你使用的forex-python库底层调用欧洲中央银行的公开汇率数据源,该数据源仅在周一至周五工作日发布当日汇率,周末及对应地区法定假日不更新数据,查询这些时段的汇率时就会抛出Currency Rates Source Not Ready错误,对应返回空值最终显示为NaN。
你猜测的时段限制实际是时区差异导致:欧央行通常在中欧时间工作日下午更新汇率,换算为北美时区对应上午时段,工作日非更新时段查询会自动返回最近一个工作日的有效汇率,不会触发报错。

问题解决办法

分两种场景处理:

  • 允许周末使用最近有效汇率:调用接口前将查询日期自动替换为最近一个工作日的日期,即可正常拿到汇率值
  • 不需要周末数据:直接过滤掉所有周末、法定假日的查询请求,不发起接口调用即可
    如果需要覆盖7*24小时的实时汇率查询,可以更换其他支持全时段汇率查询的API接口使用。
预过滤非有效时段的实现示例

首先修正现有代码中重复导入、重复初始化的冗余问题,新增日期校验逻辑,避免无效请求和NaN返回:

from forex_python.converter import CurrencyRates
import pandas as pd
import datetime

c = CurrencyRates()

# 生成时间序列
df = pd.DataFrame(pd.date_range(start='8/16/2021 10:00:00', end='8/22/2021 11:00:00', freq='600min'), columns=['DateTime'])

def get_rate(x):
    # 先判断是否为周末:weekday返回0-4为周一到周五,5、6为周六周日
    if x.weekday() >=5:
        # 场景1:需要补值的话,计算最近一个周五的日期
        offset = max(1, x.weekday() -4)
        work_date = x - datetime.timedelta(days=offset)
        x = work_date
        # 场景2:不需要补值直接返回None/指定值的话,这里直接return None即可
    try:
        op = c.get_rate('CAD', 'USD', x)
    except Exception as re:
        print(re)
        op=None
    return op

df['Rate'] = df['DateTime'].apply(get_rate)

运行后原周末时段的NaN会自动填充为2021年8月20日(最近工作日)的汇率值,不会再触发报错。

内容的提问来源于stack exchange,提问作者NewInPython

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:42:02