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

Django中如何读取第三方应用抛出异常的具体内容

解决方案

方案1:优先读取异常对象封装属性(推荐)

大部分第三方SDK的自定义异常会把接口返回的结构化数据直接绑定在异常实例上,你可以先在捕获异常的代码块中执行以下调试代码,查看可用属性:

except Exception as e:
    # 打印异常对象所有可调用属性,排查是否有封装好的字段
    print(dir(e))

如果排查到有response、message、reason这类属性,可直接读取:

import json
try:
    add_beneficiary = Beneficiary.add(bankAccount=order.payee_bank_account_number)
except Exception as e:
    # 假设异常对象已经封装了response属性为字典
    if hasattr(e, 'response'):
        msg = e.response.get('message')
    # 假设异常封装了reason属性直接返回提示文本
    elif hasattr(e, 'reason'):
        msg = e.reason
    print(msg)

方案2:从异常文本中解析内容(兜底方案)

如果SDK没有做属性封装,你可以从异常的字符串输出中提取对应的json片段,再解析出message内容:

import json
import re

try:
    add_beneficiary = Beneficiary.add(bankAccount=order.payee_bank_account_number)
except Exception as e:
    err_str = str(e)
    msg = ""
    # 方法1:分割字符串提取response的json部分
    try:
        # 按response = 分割取后半段,再按request_id分割取前半段
        response_part = err_str.split("response = ")[1].split(" request_id ")[0]
        response_json = json.loads(response_part)
        msg = response_json.get("message", "")
    except (IndexError, json.JSONDecodeError):
        pass
    
    # 方法2:正则匹配直接提取message内容(可选兜底)
    if not msg:
        match_res = re.search(r'"message":\s*"([^"]+)"', err_str)
        if match_res:
            msg = match_res.group(1)
    
    print(msg) # 输出:Entered bank Account is already registered

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 14:09:06