{"record":{"id":"ec73df845ab134a2","repo":"ytdl-org/youtube-dl","slug":"no-extractors-matching-r-found","errorCode":null,"errorMessage":"No extractors matching %r found","messagePattern":"No extractors matching %r found","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"warning","filePath":"youtube_dl/extractor/testurl.py","lineNumber":28,"sourceCode":"    \"\"\" Allows addressing of the test cases as test:yout.*be_1 \"\"\"\n\n    IE_DESC = False  # Do not list\n    _VALID_URL = r'test(?:url)?:(?P<id>(?P<extractor>.+?)(?:_(?P<num>[0-9]+))?)$'\n\n    def _real_extract(self, url):\n        from ..extractor import gen_extractors\n\n        mobj = re.match(self._VALID_URL, url)\n        video_id = mobj.group('id')\n        extractor_id = mobj.group('extractor')\n        all_extractors = gen_extractors()\n\n        rex = re.compile(extractor_id, flags=re.IGNORECASE)\n        matching_extractors = [\n            e for e in all_extractors if rex.search(e.IE_NAME)]\n\n        if len(matching_extractors) == 0:\n            raise ExtractorError(\n                'No extractors matching %r found' % extractor_id,\n                expected=True)\n        elif len(matching_extractors) > 1:\n            # Is it obvious which one to pick?\n            try:\n                extractor = next(\n                    ie for ie in matching_extractors\n                    if ie.IE_NAME.lower() == extractor_id.lower())\n            except StopIteration:\n                raise ExtractorError(\n                    ('Found multiple matching extractors: %s' %\n                        ' '.join(ie.IE_NAME for ie in matching_extractors)),\n                    expected=True)\n        else:\n            extractor = matching_extractors[0]\n\n        num_str = mobj.group('num')\n        num = int(num_str) if num_str else 0","sourceCodeStart":10,"sourceCodeEnd":46,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/testurl.py#L10-L46","documentation":"Raised by the special testurl extractor (testurl:<extractor regex>[/<test number>]) when the case-insensitive regex the user supplied matches zero IE_NAMEs among all generated extractors. Marked expected=True — it is purely a user-input error in the test pseudo-URL.","triggerScenarios":"Using a URL like testurl:nosuchthing or testurl:xyz123 where no extractor's IE_NAME contains that substring under re.IGNORECASE.","commonSituations":"Typos in the extractor pattern; assuming an extractor name that differs from its IE_NAME (e.g. 'soundcloud' vs registered name variants); copied test URLs referencing extractors removed in newer versions.","solutions":["List extractor names (youtube-dl --list-extractors) and re-check the spelling of the pattern you passed.","Use a broader, correct substring, e.g. testurl:youtube for YouTube-family extractors (note: patterns matching multiple extractors have their own ambiguity error).","Read the error: it echoes the exact pattern searched, so compare it directly against --list-extractors output."],"exampleFix":"# before\n# youtube-dl testurl:yutube\n# after\n# youtube-dl --list-extractors | grep -i youtube   # find real names\n# youtube-dl testurl:youtube","handlingStrategy":"validation","validationCode":"import subprocess, re\nnames = subprocess.run(['youtube-dl', '--list-extractors'], capture_output=True, text=True).stdout.splitlines()\nif not any(re.search(pattern, n, re.IGNORECASE) for n in names):\n    print('pattern %r matches no extractor' % pattern)","typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info('testurl:%s' % pattern)\nexcept ExtractorError as e:\n    if e.expected and 'No extractors matching' in str(e):\n        suggest_similar_names(pattern)   # fuzzy-match against --list-extractors\n    raise","preventionTips":["Copy extractor names from --list-extractors output, not from memory.","Remember testurl patterns are regexes matched against IE_NAMEs.","Re-validate patterns after upgrades; extractor sets change across versions."],"tags":["test-utility","user-input","expected-error"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}