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

使用pyTelegramBotAPI在AWS ECS容器中遇连接中断异常求助

问题分析与解决方案

为什么加了外层异常捕获还会看到错误日志?

你看到的Infinity polling exception是pyTelegramBotAPI内部打印的日志,而非未被捕获的异常。因为你设置了none_stop=True,infinity_polling方法内部会自动捕获异常并重启轮询,同时把错误信息打印出来——这个过程不会让方法退出,所以你的外层try-except根本触发不到。

解决方法

1. 屏蔽pyTelegramBotAPI的内部错误日志

如果只是不想看到这些日志,可以通过Python的logging模块调整TeleBot的日志级别,只让它输出警告及以上的信息:

import logging
from telebot import logger as telebot_logger

# 把TeleBot的日志级别设为WARNING,屏蔽INFO和DEBUG级别的错误日志
telebot_logger.setLevel(logging.WARNING)

2. 手动实现轮询循环,完全控制异常处理

放弃infinity_polling,直接用bot.polling()自己写循环,这样所有异常都能被你自己的逻辑捕获,避免内部日志干扰:

import time
import telebot

bot = telebot.TeleBot("YOUR_TOKEN")

# 这里写你的bot handler,比如@bot.message_handler(...)

while True:
    try:
        print("Starting polling...")
        bot.polling(
            timeout=30,
            long_polling_timeout=30,
            allowed_updates=["message", "callback_query"]  # 只监听需要的更新类型,减少请求量
        )
    except Exception as e:
        print(f"Polling failed with error: {e}")
        time.sleep(10)  # 出错后等待10秒再重试

3. 优化轮询参数与网络配置

  • 调整timeout和long_polling_timeout:太长的超时时间更容易遇到连接断开,建议设为30秒以内。
  • 指定allowed_updates:只监听你的机器人需要处理的更新类型(比如消息、回调查询),减少每次请求的数据量,降低连接异常概率。
  • 检查ECS网络:确保容器所在的安全组允许出站访问api.telegram.org:443,同时确认NAT网关/网络链路稳定——AWS ECS偶尔的网络波动也可能导致这类连接断开问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:48:17