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

