ytdl-org/youtube-dl · error · ExtractorError

error_msg % video_id

Error message

error_msg % video_id

What it means

The message is a template (error_msg % video_id) applied in VKIE's ERRORS dict loop: when the video_ext.php page matches one of several known VK error markers (author blocked, video deleted, region-locked, rightholder complaint), the matching human-readable string is formatted with the video ID and raised. The placeholder in the report represents the template, not literal output.

Source

Thrown at youtube_dl/extractor/vk.py:385

                r'<!>Access denied':
                'Access denied to video %s.',

                r'<!>Видеозапись недоступна, так как её автор был заблокирован.':
                'Video %s is no longer available, because its author has been blocked.',

                r'<!>This video is no longer available, because its author has been blocked.':
                'Video %s is no longer available, because its author has been blocked.',

                r'<!>This video is no longer available, because it has been deleted.':
                'Video %s is no longer available, because it has been deleted.',

                r'<!>The video .+? is not available in your region.':
                'Video %s is not available in your region.',
            }

            for error_re, error_msg in ERRORS.items():
                if re.search(error_re, info_page):
                    raise ExtractorError(error_msg % video_id, expected=True)

            player = self._parse_json(self._search_regex(
                r'var\s+playerParams\s*=\s*({.+?})\s*;\s*\n',
                info_page, 'player params'), video_id)

        youtube_url = YoutubeIE._extract_url(info_page)
        if youtube_url:
            return self.url_result(youtube_url, YoutubeIE.ie_key())

        vimeo_url = VimeoIE._extract_url(url, info_page)
        if vimeo_url is not None:
            return self.url_result(vimeo_url, VimeoIE.ie_key())

        pladform_url = PladformIE._extract_url(info_page)
        if pladform_url:
            return self.url_result(pladform_url, PladformIE.ie_key())

        m_rutube = re.search(

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Read the formatted message to identify the category: author blocked, deleted, region-locked, or rightholder complaint
  2. For region errors, retry from an IP in an allowed region
  3. For deleted/removed videos, no download is possible — drop the entry from batch jobs
Defensive patterns

Strategy: try-catch

Try / catch

from youtube_dl.utils import ExtractorError
import re
try:
    ydl.extract_info(url)
except ExtractorError as e:
    m = str(e)
    if 'not available in your region' in m:
        retry_via_proxy(url)
    elif re.search(r'(deleted|blocked|removed)', m):
        drop(url)  # permanent — do not retry

Prevention

When it happens

Trigger: The embed page contains one of the ERRORS markers, e.g. '<!>This video is no longer available, because its author has been blocked.' or '<!>The video .+? is not available in your region.'; each maps to a 'Video %s ...' message with expected=True.

Common situations: Dead playlist links whose authors were banned; copyright takedowns; region restrictions when downloading from another country.

Related errors


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/4978d2ce5ade7f38. Report an issue: GitHub.