Telethon会话文件复用异常:首次生成会话无法在二次代码中生效
Telethon会话文件复用后无法正常工作的解决办法
你遇到的问题很常见——第一段代码能正常生成会话并完成账号授权,但第二段代码使用同一个会话文件时,client.get_me()返回None,会话完全失效。我来帮你拆解原因并给出可行的解决办法:
问题复现
第一段可正常运行的代码
import telethon from telethon import tl from telethon import TelegramClient import logging def update_handler(update_object): print(update_object) phone_number='*' client = telethon.TelegramClient('sweet', api_id = *, api_hash = '*') client.connect() print('connected') if not client.is_user_authorized(): client.send_code_request(phone_number) me = client.sign_in(phone_number, input('Enter code: ')) print(client.get_me()) print(me.stringify())
输出:
connected Enter code: 85813 User(is_self=True,contact=True,mutual_contact=False,deleted=False,bot=False,bot_chat_history=False,bot_nochats=False,verified=False,restricted=False,min=False,bot_inline_geo=False,id= ,access_hash=- ,first_name='-',last_name=None,username=None,phone=‘*’,photo=None,status=UserStatusOnline(expires=datetime.utcfromtimestamp(1515302772)), bot_info_version=None, restriction_reason=None, bot_inline_placeholder=None, lang_code=None) User(is_self=True,contact=True,mutual_contact=False,deleted=False,bot=False,bot_chat_history=False,bot_nochats=False,verified=False,restricted=False,min=False,bot_inline_geo=False,id= ,access_hash=- ,first_name='-',last_name=None,username=None,phone=‘*’,photo=None,status=UserStatusOnline(expires=datetime.utcfromtimestamp(1515302772)), bot_info_version=None, restriction_reason=None, bot_inline_placeholder=None, lang_code=None)
第二段会话失效的代码
import telethon from telethon import tl from telethon import TelegramClient import logging def update_handler(update_object): print(update_object) phone_number='**' client = telethon.TelegramClient('sweet', api_id = *, api_hash = '*') client.connect() print('connected') print(client.get_me())
输出:None
问题原因分析
- 账号信息不匹配:第二段代码的
phone_number是'**',和第一段的'*'不一致。Telethon的会话文件是和特定账号(api_id、api_hash、手机号)绑定的,混用不同账号信息会导致会话无法被识别。 - 未检查授权状态:第二段代码直接调用
connect()后就尝试获取用户信息,但没有验证会话是否仍处于有效授权状态。即使有会话文件,也可能存在授权过期、文件损坏的情况。
解决方案
方案1:统一账号信息并检查授权状态
修改第二段代码,确保phone_number和第一段完全一致,同时加入授权状态检查:
import telethon from telethon import tl from telethon import TelegramClient import logging def update_handler(update_object): print(update_object) # 确保手机号和第一段完全一致 phone_number='*' client = telethon.TelegramClient('sweet', api_id = *, api_hash = '*') client.connect() print('connected') # 检查授权状态,若未授权则重新完成登录流程 if not client.is_user_authorized(): client.send_code_request(phone_number) me = client.sign_in(phone_number, input('Enter code: ')) print(client.get_me())
方案2:使用更可靠的client.start()方法
Telethon的start()方法会自动处理连接、授权检查和会话复用逻辑,比手动调用connect()更省心:
import telethon from telethon import tl from telethon import TelegramClient import logging def update_handler(update_object): print(update_object) phone_number='*' client = telethon.TelegramClient('sweet', api_id = *, api_hash = '*') # start方法会自动处理连接和授权,已有有效会话时直接复用 client.start(phone_number) print('connected') print(client.get_me())
方案3:重置会话文件
如果上述方法都无效,可能是会话文件已损坏。直接删除当前的sweet.session文件,重新运行第一段代码生成新的会话文件,再用第二段代码(确保账号信息完全一致)测试即可。
内容的提问来源于stack exchange,提问作者플라스크
相关产品推荐
相关产品推荐

