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

如何正确使用requests-cache的filter过滤器,不缓存含指定字段的响应

问题原因
  • 核心错误:过滤函数的匹配条件使用了HTML转义后的引号",但实际response.text中存储的是原生双引号",匹配逻辑永远无法命中,函数始终返回True,导致所有响应都被缓存。
  • 可优化隐患:直接用字符串匹配JSON字段容易受格式影响,比如键值中间存在空格、换行时会匹配失败,容错性较低。
  • 额外参数拼写错误:install_cache方法中设置缓存有效期的参数应为expire_after,你当前写的expired_after多了后缀d,会导致缓存过期规则不生效(非本次报错的直接原因)。
修复方案

快速修复(直接修正匹配字符串)

直接将过滤函数中的转义引号替换为原生双引号即可:

def phrase_filter(response: requests.models.Response)->bool:
    if '"incomplete_results":true' in response.text:
        return False
    return True

更鲁棒的方案(解析JSON后判断)

如果响应固定为JSON格式,建议先解析为字典再判断,避免格式问题导致的匹配失效:

def phrase_filter(response: requests.models.Response)->bool:
    try:
        resp_json = response.json()
        # incomplete_results为True时返回False,不缓存
        return not resp_json.get("incomplete_results", False)
    except Exception:
        # 非JSON格式响应可按需调整返回值,此处默认缓存
        return True

修改后重新运行测试即可通过断言。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:06:03