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

Python try-except捕获异常发Slack通知遇JSON序列化错误求助

修复异常信息无法JSON序列化的问题

你遇到的TypeError是因为捕获到的MailboxLoginError异常对象无法被json.dumps()直接序列化——JSON只能处理字符串、数字、列表、字典等基础类型,不能直接序列化自定义类实例。

解决方案1:将异常转为字符串描述

直接用str(e)提取异常的文本描述,替换原代码中的slack_message赋值语句:

import json
import urllib3
from imap_tools import MailBox

try:
    with MailBox('imap.gmail.com').login(username, password) as mailbox:
         print(mailbox)                                      
except Exception as e:
    print(e)
    # 把异常对象转为可序列化的字符串
    slack_message = {'text': str(e)}

    http = urllib3.PoolManager()
    response = http.request('POST',
                            slack_webhook_url,
                            body=json.dumps(slack_message),
                            headers={'Content-Type': 'application/json'},
                            retries=False)

解决方案2:发送完整异常栈信息(便于排查)

如果需要更详细的错误上下文,比如调用栈,可以用traceback模块获取完整异常信息:

import json
import urllib3
import traceback
from imap_tools import MailBox

try:
    with MailBox('imap.gmail.com').login(username, password) as mailbox:
         print(mailbox)                                      
except Exception as e:
    print(e)
    # 获取包含调用栈的完整异常信息
    error_details = traceback.format_exc()
    # 用代码块格式展示异常栈,Slack会自动格式化
    slack_message = {'text': f"系统发生异常:\n```\n{error_details}\n```"}

    http = urllib3.PoolManager()
    response = http.request('POST',
                            slack_webhook_url,
                            body=json.dumps(slack_message),
                            headers={'Content-Type': 'application/json'},
                            retries=False)

这样修改后,slack_message中的text字段是字符串类型,就能正常被JSON序列化并发送到Slack了。

内容的提问来源于stack exchange,提问作者Mr. Annonymous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:35:25