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

如何从日期范围中获取与指定日期最接近的日期?解决类型错误

问题解决:寻找与指定日期最接近的日期

你遇到的TypeError: unsupported operand type(s) for -: 'str' and 'str',核心原因是字符串类型无法直接进行减法运算——你把目标日期和待选日期都转成了字符串,导致无法计算日期差值。要解决这个问题,需要将所有日期统一转换成date对象后再做比较。

修改后的完整代码

import yfinance as yf
from datetime import date, timedelta

# 获取目标日期(90天后的日期,保留date对象类型)
target_date = date.today() + timedelta(days=90)

# 获取MSFT的期权到期日期列表
ticker = yf.Ticker("MSFT")
date_strings = ticker.options

# 定义寻找最近日期的函数
def nearest_date(date_strings, target_date):
    # 将每个字符串日期转成date对象,计算与目标日期的差值绝对值
    return min(date_strings, key=lambda x: abs(date.fromisoformat(x) - target_date))

# 执行函数并输出结果
closest_date = nearest_date(date_strings, target_date)
print(f"与目标日期{target_date}最接近的日期是:{closest_date}")

关键修改说明

  1. 简化导入并避免命名冲突:移除重复的datetime导入,只保留需要的date和timedelta类,避免变量名冲突。
  2. 保留日期的原生类型:目标日期target_date直接使用date对象,无需转成字符串,省去后续类型转换步骤。
  3. 字符串日期转原生日期对象:利用date.fromisoformat(x)将yfinance返回的YYYY-MM-DD格式字符串日期,转换成可计算的date对象,这样就能和target_date计算时间差(返回timedelta类型),再通过绝对值比较大小找到最近的日期。

如果你的待选日期格式不是YYYY-MM-DD,可以替换为date.strptime(x, "%Y%m%d")(对应你之前用的%Y%m%d格式)来完成转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:05:22