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
- Read the formatted message to identify the category: author blocked, deleted, region-locked, or rightholder complaint
- For region errors, retry from an IP in an allowed region
- 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
- Classify ERRORS-dict messages into permanent vs region-retryable before queueing
- Track per-URL failure reasons so batch jobs skip known-dead entries
- For region errors, match proxy exit country to the video's allowed region
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
- The video is not available, Facebook said: "%s"
- Video %s is no longer available
- Generic error. flag = %d
- lynda returned error: %s
- This video is not available from your country.
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/4978d2ce5ade7f38.
Report an issue: GitHub.