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
相关产品推荐
相关产品推荐

