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

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

问题原因分析

  1. 账号信息不匹配:第二段代码的phone_number是'**',和第一段的'*'不一致。Telethon的会话文件是和特定账号(api_id、api_hash、手机号)绑定的,混用不同账号信息会导致会话无法被识别。
  2. 未检查授权状态:第二段代码直接调用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,提问作者플라스크

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:33:02