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

Python多线程使用requests库出现线程异常,如何关闭或简化异常提示?

问题原因定位

你遇到的异常大概率来自两类场景:

  • 多线程共用requests.Session实例:requests的Session对象本身不是线程安全的,多线程并发调用同一个Session发送请求时,会出现响应数据解析错乱、连接池资源竞争的问题,刚好这个接口返回的结构解析要求高,所以触发报错
  • 缺少错误兜底逻辑:请求可能因为网络波动、账号Cookie失效、接口限流返回非200状态码、非JSON格式响应,或者返回的JSON数据中不存在RobuxBalance字段,没有异常捕获就会直接抛出线程未处理异常
修复方案

1. 新增异常捕获逻辑,简化异常提示

将请求和解析逻辑包裹在异常捕获块中,可自定义错误输出格式,避免完整栈追踪打印影响使用体验:

import requests
from requests.exceptions import RequestException

try:
    r = req.get("https://api.roblox.com/users/account-info", timeout=10)
    # 先校验请求状态是否正常
    r.raise_for_status()
    resp_json = r.json()
    robux_balance = resp_json.get("RobuxBalance")
    if robux_balance is None:
        # 自定义精简错误提示
        print("账户信息接口返回值缺少RobuxBalance字段")
except RequestException as e:
    print(f"账户信息请求失败: {str(e)}")
except ValueError:
    print("账户信息接口返回非合法JSON格式")
except Exception as e:
    print(f"账户信息处理未知错误: {str(e)}")

2. 修复多线程Session安全问题

如果你的req是全局共用的requests.Session实例,任选以下一种方案修复:

  • 每个线程单独创建自己的Session实例,不要跨线程共用
  • 调用Session发送请求前加线程锁,避免并发调用
  • 不使用Session,直接调用requests.get()方法发送请求,每次请求独立维护连接

3. 可选:全局设置线程异常处理钩子

如果需要统一简化所有线程的异常提示,可自定义全局线程异常处理函数:

import threading
import sys

def custom_thread_excepthook(args):
    exc_type, exc_value = args.exc_type, args.exc_value
    # 只打印精简错误信息,不输出完整栈追踪
    print(f"线程报错: {exc_type.__name__}: {exc_value}")

threading.excepthook = custom_thread_excepthook

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:36:04