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

Python中执行help(yt_dlp.YoutubeDL)抛出KeyError异常问题

问题描述

在Python环境中使用yt_dlp库时,需查询yt_dlp.YoutubeDL类的所有可用方法与属性,执行help(yt_dlp.YoutubeDL)语句时运行失败,报错信息如下:

File "c:\Users\user\Desktop\youtube playlist downloader\playlist_dowloader.py", line 56, in <module>
    main()
  File "c:\Users\user\Desktop\youtube playlist downloader\playlist_dowloader.py", line 49, in main
    help(yt_dlp.YoutubeDL)
  File "C:\Python310\lib\_sitebuiltins.py", line 103, in __call__
    return pydoc.help(*args, **kwds)
  File "C:\Python310\lib\pydoc.py", line 2006, in __call__
    self.help(request)
  File "C:\Python310\lib\pydoc.py", line 2065, in help
    else: doc(request, 'Help on %s:', output=self._output)
  File "C:\Python310\lib\pydoc.py", line 1785, in doc
    pager(render_doc(thing, title, forceload))
  File "C:\Python310\lib\pydoc.py", line 1778, in render_doc
    return title % desc + '\n\n' + renderer.document(object, name)
  File "C:\Python310\lib\pydoc.py", line 477, in document
    if _isclass(object): return self.docclass(*args)
  File "C:\Python310\lib\pydoc.py", line 1415, in docclass
    for name, kind, cls, value in classify_class_attrs(object)
  File "C:\Python310\lib\pydoc.py", line 300, in classify_class_attrs
    for (name, kind, cls, value) in inspect.classify_class_attrs(object):
  File "C:\Python310\lib\inspect.py", line 554, in classify_class_attrs
    homecls = getattr(get_obj, "__objclass__", homecls)
  File "C:\Python310\lib\site-packages\yt_dlp\utils.py", line 5333, in __getattr__
    return self._dict[attr]
KeyError: '__objclass__'
报错原因

yt_dlp部分自定义类的__getattr__方法实现存在兼容缺陷:Python内置inspect模块遍历类属性生成帮助文档时,会尝试读取__objclass__特殊属性,读取失败时本应捕获AttributeError返回默认值,但yt_dlp的自定义__getattr__在属性不存在时直接抛出KeyError,导致help流程中断。

解决方案
  • 方案1:绕过全量类遍历
    直接使用dir(yt_dlp.YoutubeDL)获取所有属性、方法的名称列表,需要查询单个方法/属性的详情时,单独调用help即可,例如help(yt_dlp.YoutubeDL.download),单属性查询不会触发全量类遍历的bug。
  • 方案2:临时打兼容补丁
    在调用help前添加补丁代码,修正特殊属性读取时的报错类型:
    import yt_dlp
    from yt_dlp.utils import LazyList
    
    # 补丁:双下划线开头的特殊属性读取失败时抛出AttributeError而非KeyError
    _origin_getattr = LazyList.__getattr__
    def _patched_getattr(self, attr):
        if attr.startswith("__"):
            raise AttributeError(attr)
        return _origin_getattr(self, attr)
    LazyList.__getattr__ = _patched_getattr
    
    # 补丁执行后即可正常调用help
    help(yt_dlp.YoutubeDL)
    
  • 方案3:升级yt_dlp版本
    该兼容问题在后续发布的yt_dlp新版本中已修复,执行命令升级到最新版即可正常使用help:
    pip install -U yt-dlp
    

内容的提问来源于stack exchange,提问作者work

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:57:18