代码之家  ›  专栏  ›  技术社区  ›  Nico Schlömer David Maze

抑制requests_cache中的错误/警告

  •  0
  • Nico Schlömer David Maze  · 技术社区  · 1 年前

    我正在使用 requests_cache 以缓存我的Python HTTP请求。缓存过期后,如果用户离线,我不希望请求立即失败;我宁愿留出一些时间来请求缓存 尝试 以获取新结果,但如果不成功则使用缓存。参数 stale_if_error 成功地完成了此操作(没有错误),但它仍然会在屏幕上打印一条大的错误/警告消息:

    import requests_cache
    import time
    from datetime import timedelta
    
    session = requests_cache.CachedSession(
        expire_after=timedelta(seconds=1),
        stale_if_error=timedelta(minutes=5),
    )
    session.cache.clear()
    
    response = session.get("https://httpbin.org/get")
    print(response.from_cache, response.is_expired)
    
    # turn off network here
    time.sleep(10)
    
    response = session.get("https://httpbin.org/get", timeout=5)
    print(response.from_cache, response.is_expired)
    
    False False
    [...]
    <big fat error message>
    requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='httpbin.org', port=443): Read timed out. (read timeout=5)
    [...]
    True True
    

    有没有办法抑制这种情绪?

    0 回复  |  直到 1 年前
        1
  •  1
  •   Abdul Aziz Barkat    1 年前

    这个 requests_cache 包正在使用日志记录模块来记录警告等。您在那里看到错误是因为 this code :

    logger.warning(
       f'Request for URL {cached_response.request.url} failed; using cached response',
       exc_info=True,
    )
    

    任何记录器的默认日志记录级别为 WARNING 所以你可以把它打印到控制台上。一个简单的解决方案是将日志记录级别设置为 ERROR 在脚本中:

    import logging
    
    requests_cache_logger = logging.getLogger('requests_cache.session')
    requests_cache_logger.setLevel(logging.ERROR)