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

如何捕获telegram_send无网络连接时抛出的异常?

解决telegram_send断网时的异常捕获问题

当你断开网络运行脚本时,直接捕获socket.gaierror无效,是因为telegram_send底层依赖requests库,网络异常会被requests封装为自身的异常类型,而非直接抛出socket层的原始异常。以下是具体解决方法:

1. 先确定具体异常类型

如果不确定要捕获哪种异常,可以先临时捕获所有异常,打印出异常的类型和详情:

import telegram_send

try:
    telegram_send.send(messages=['OI!'])
except Exception as e:
    print(f"异常类型: {type(e).__name__}")
    print(f"异常信息: {str(e)}")
    # 查看底层嵌套的原始异常
    if hasattr(e, '__cause__') and e.__cause__:
        print(f"底层异常: {type(e.__cause__).__name__}: {str(e.__cause__)}")

断网运行后,你会发现抛出的是requests.exceptions.ConnectionError,其底层才是socket.gaierror。

2. 针对性捕获异常

直接捕获requests库的网络连接异常即可覆盖断网场景:

import telegram_send
from requests.exceptions import ConnectionError, RequestException

try:
    telegram_send.send(messages=['OI!'])
except ConnectionError:
    print('没有网络连接,请检查网络状态。')
# 可选:捕获所有请求相关异常,处理其他可能的请求失败情况
except RequestException as e:
    print(f"请求发送失败: {str(e)}")

3. 捕获底层socket异常(可选)

如果你一定要捕获socket.gaierror,可以通过异常的__cause__属性判断:

import telegram_send
import socket

try:
    telegram_send.send(messages=['OI!'])
except Exception as e:
    if isinstance(e.__cause__, socket.gaierror):
        print('DNS解析失败(无网络或域名错误)')
    else:
        # 处理其他异常
        print(f"未知错误: {str(e)}")

不过这种方式不如直接捕获ConnectionError简洁,推荐使用第二种方案。

内容的提问来源于stack exchange,提问作者J.Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:41:32