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

运行Python代码时遇TypeError:datetime.date与str无法比较

解决TypeError: '<' not supported between instances of 'datetime.date' and 'str'

嗨,这个错误我太熟了!本质就是你在代码里把**datetime.date对象和字符串类型的日期**直接用</>这类比较符碰在一起了——Python可接受不了不同类型的对象这么比哦。

结合你贴的雅虎财经爬取代码,大概率是在处理返回的历史股价数据时,对日期字段的类型没统一好。我给你分情况说修复方法:

先搞清楚数据里的日期格式

雅虎财经返回的HistoricalPriceStore里的date字段一般是Unix时间戳(数字),但也可能你后续处理把它转成了字符串。先打印几条quotes里的数据确认下:

print(quotes[:2])  # 看看date字段是数字还是字符串

情况1:日期是Unix时间戳(数字)

把时间戳转成datetime.date对象,再和你的目标日期比较:

from datetime import datetime, date

# 假设你要筛选2023年1月1日之前的数据
target_date = date(2023, 1, 1)

for price_item in quotes:
    # 把Unix时间戳转成date对象
    item_date = datetime.fromtimestamp(price_item['date']).date()
    if item_date < target_date:
        # 你的业务逻辑,比如添加到筛选后的列表里
        ...

情况2:日期是字符串(比如"2024-05-20")

把字符串转成datetime.date对象再比较:

from datetime import datetime, date

target_date = date(2023, 1, 1)

for price_item in quotes:
    # 注意这里的格式要和你拿到的日期字符串完全匹配,比如"%Y-%m-%d"对应"年-月-日"
    item_date = datetime.strptime(price_item['date'], "%Y-%m-%d").date()
    if item_date < target_date:
        ...

用Pandas处理更高效

既然你导入了pandas,可以直接批量转换日期类型,避免循环里的麻烦:

import pandas as pd
from datetime import date

df = pd.DataFrame(quotes)

# 如果是时间戳转date
df['date'] = pd.to_datetime(df['date'], unit='s').dt.date
# 如果是字符串转date
df['date'] = pd.to_datetime(df['date']).dt.date

# 筛选的时候就不会报错了
filtered_df = df[df['date'] < date(2023, 1, 1)]

最后再啰嗦一句:以后做日期比较,一定要保证两边是相同类型——要么都是datetime.date对象,要么都是格式完全一致的字符串,就不会再踩这个坑啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:53:27