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

使用Telethon获取Telegram频道内容时遇RuntimeWarning问题求助

解决Telethon获取频道内容时的RuntimeWarning问题

问题描述

作为Telethon初学者,编写了获取Telegram频道内容的代码,运行时出现两次RuntimeWarning: Enable tracemalloc to get the object allocation traceback警告,希望程序能正常输出每条消息的文本内容。

原代码:

from telethon import TelegramClient, events, sync

# Remember to use your own values from my.telegram.org!
api_id = 12345678
api_hash = "zdzhdzud"
client = TelegramClient(None, api_id, api_hash)

@client.on(events.NewMessage(chats='Channel_Test'))
async def my_event_handler(event):
    print("\n\n\n",event.raw_text,"\n\n\n")

client.start()
client.run_until_disconnected()

解决方案

1. 消除RuntimeWarning

这个警告是Python的内存分配追踪提示,不影响核心功能。如果不想看到,可在代码开头添加警告过滤:

import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning)

2. 优化代码提升稳定性

原代码存在几个可优化的点,避免潜在问题:

  • 移除不必要的sync导入:你使用的是异步事件处理,sync模块用于同步调用,可能引发不必要的冲突
  • 给TelegramClient指定会话文件名:用None会创建临时会话,每次运行都需要重新登录,指定文件名(比如'my_session')可持久化会话状态
  • 增加消息文本判断:避免因无文本内容的消息导致报错

修改后的代码:

import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning)

from telethon import TelegramClient, events

# 替换为你自己的api_id和api_hash
api_id = 12345678
api_hash = "zdzhdzud"
# 指定会话文件名,持久化登录状态
client = TelegramClient('my_session', api_id, api_hash)

@client.on(events.NewMessage(chats='Channel_Test'))
async def my_event_handler(event):
    # 确保消息有文本内容再输出
    if event.raw_text:
        print("\n\n\n", event.raw_text, "\n\n\n")
    else:
        print("\n\n\n[无文本内容的消息]\n\n\n")

# 启动客户端,首次运行会提示输入手机号验证
client.start()
print("客户端已启动,正在监听频道消息...")
client.run_until_disconnected()

3. 功能验证

运行修改后的代码,首次启动会引导完成手机号验证码登录,之后会自动监听指定频道的新消息,正常输出文本内容,且不再出现RuntimeWarning。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:55:20