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

VSCode重启后Python 3.9下Telethon/asyncio脚本启动失败,报KeyError与TypeError错误

VSCode重启后Python 3.9下Telethon/asyncio脚本启动失败,报KeyError与TypeError错误

我之前也碰到过类似的asyncio和Telethon在VSCode终端里的奇怪问题,结合你给出的报错信息,大概率是VSCode重启后终端的事件循环环境被干扰了,或者Python的selectors模块状态异常。下面给你几个可以快速排查和解决的步骤:

一、彻底清理VSCode及终端残留进程

有时候VSCode的“重启”操作并不彻底,后台残留的终端进程会搞乱asyncio的文件描述符(就是报错里提到的fd=6)。建议:

  • 完全退出VSCode(MacOS可以按Cmd+Q彻底关闭,确保后台进程也终止)
  • 重新打开VSCode后,一定要新开一个集成终端窗口,不要复用之前的终端会话,再运行你的脚本

二、强制指定asyncio事件循环策略

你的报错涉及到_UnixSelectorEventLoop的异常,Python 3.9在MacOS环境下自动选择的事件循环可能存在兼容性问题。可以在脚本的最开头添加以下代码,强制指定稳定的事件循环:

import asyncio
import platform

# 针对MacOS系统修复事件循环策略
if platform.system() == 'Darwin':
    asyncio.set_event_loop_policy(asyncio.DefaultEventLoopPolicy())

# 或者直接强制使用SelectorEventLoop(备选方案)
# from asyncio import SelectorEventLoop
# asyncio.set_event_loop(SelectorEventLoop())

# 之后再初始化Telethon Client
from telethon import TelegramClient
# 替换为你的实际API信息
client = TelegramClient("your-session-name", api_id, api_hash)

三、用全新虚拟环境隔离依赖冲突

VSCode安装扩展可能偷偷修改了Python全局环境的依赖(比如某些扩展自带了旧版本的asyncio相关模块),导致和Telethon的依赖冲突。可以创建一个干净的虚拟环境测试:

# 针对Python3.9创建虚拟环境
python3.9 -m venv telethon-venv

# 激活虚拟环境(MacOS/Linux)
source telethon-venv/bin/activate

# 安装最新版Telethon
pip install --upgrade telethon

# 在虚拟环境中运行脚本
python your-script.py

如果在虚拟环境中能正常运行,说明你的全局Python环境存在依赖污染,建议后续就用这个虚拟环境来运行脚本,或者全局清理冲突的依赖包。

四、排查VSCode扩展与终端设置

有些VSCode的终端类扩展会修改终端的fork/exec行为,导致asyncio的文件描述符泄漏:

  • 禁用最近新安装的所有VSCode扩展,然后重启VSCode测试脚本
  • 尝试把VSCode的集成终端切换为系统原生终端:打开VSCode设置,搜索terminal.integrated.defaultProfile.osx,将其改为Terminal.app或iTerm.app,然后在原生终端中运行脚本

对报错的补充说明

你看到的连锁错误其实都是由一个核心问题引发的:

KeyError: '6 is not registered'是因为asyncio事件循环尝试注册一个已经被释放的文件描述符
后续的TypeError: changelist must be an iterable of select.kevent objects和AttributeError都是事件循环在错误处理过程中,内部状态混乱导致的连锁反应,本质还是事件循环的初始化环境异常。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 11:28:08