如何在Python中完全屏蔽requests和urllib3的连接错误?
解决requests连接错误仍打印到控制台的问题
问题根源
你看到的Error fetching...错误信息,不是requests或urllib3的默认日志输出,而是你的代码中**fetch_url函数内部在主动打印错误**。你当前的try/except只捕获了check_module里的异常,但如果fetch_url本身在遇到错误时直接用print或日志输出了错误内容,这些信息还是会出现在控制台。
解决方案
1. 修正fetch_url函数,移除错误打印逻辑
找到fetch_url的实现代码,删掉里面主动打印错误的语句。比如如果它原本是这样写的:
def fetch_url(url, method="GET", headers=None): try: session = create_retry_session() response = session.request(method, url, headers=headers) return response except Exception as e: print(f"Error fetching {url} with method {method}: {e}") # 这行是错误来源 return None
把print那一行删掉,改成仅在DEBUG模式下输出(如果需要调试):
def fetch_url(url, method="GET", headers=None): try: session = create_retry_session() response = session.request(method, url, headers=headers, timeout=10) # 建议添加超时 return response except requests.exceptions.RequestException as e: if DEBUG: # 仅调试时输出 print(f"Debug: 请求 {url} 失败: {str(e)}") return None
2. 完善日志抑制规则
除了你当前的设置,还需要抑制urllib3的connectionpool子日志器,重试相关的底层日志可能来自这里:
logging.getLogger("urllib3.connectionpool").setLevel(logging.CRITICAL)
3. 确保异常捕获覆盖全面
在fetch_url内部直接捕获所有请求相关异常,避免异常逃逸到外层被其他逻辑意外打印:
def fetch_url(url, method="GET", headers=None): try: session = create_retry_session() response = session.request(method, url, headers=headers, timeout=10) return response except requests.exceptions.RequestException: # 捕获所有请求类异常 return None
验证效果
修改完成后,运行代码时连接错误就不会再自动打印到控制台,只有开启DEBUG模式时才会输出调试信息,符合你的需求。
内容的提问来源于stack exchange,提问作者P_n
相关产品推荐
相关产品推荐

