如何修复TypeError: __init__()意外关键字参数'session_name'报错
错误原因
这个报错是Pyrogram依赖版本不兼容导致的:
你使用的utube机器人代码基于Pyrogram 1.x版本编写,Heroku部署时默认会拉取最新发布的Pyrogram 2.x版本,2.x版本对Client类的初始化参数做了不兼容旧版本的调整,原先用于指定会话文件名的session_name参数被重命名为name,传入旧参数名就会触发你看到的TypeError。
解决方案
二选一即可:
- 方案1:修改代码适配新版Pyrogram
打开项目中的/app/bot/utubebot.py文件,找到super().__init__()调用块,把参数session_name=Config.SESSION_NAME修改为name=Config.SESSION_NAME,其余代码保持不变。
修改后对应代码段如下:from pyrogram import Client from .config import Config class UtubeBot(Client): def __init__(self): super().__init__( name=Config.SESSION_NAME, bot_token=Config.BOT_TOKEN, api_id=Config.API_ID, api_hash=Config.API_HASH, plugins=dict(root="bot.plugins"), workers=6, ) self.DOWNLOAD_WORKERS = 6 self.counter = 0 self.download_controller = {} - 方案2:固定依赖版本适配旧代码
如果不想修改业务代码,可以直接把Pyrogram版本固定为代码兼容的1.x最新稳定版:打开项目根目录的依赖声明文件requirements.txt,找到Pyrogram对应的依赖行,修改为pyrogram==1.4.16,重新部署时就会安装兼容版本,不会出现参数不匹配问题。
修改完成后重新推送代码到Heroku触发构建部署,即可解决该启动报错。
内容的提问来源于stack exchange,提问作者Muhammed Mahran
相关产品推荐
相关产品推荐

