Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Browse files

Make ExtractorError usable for other causes

  • Loading branch information...
commit 01951dda7a27d3bd2331f22ded5d33876cf1dad9 1 parent 6e3dba1
@phihag phihag authored
7 youtube_dl/
@@ -216,12 +216,15 @@ def trouble(self, message=None, tb=None):
Depending on if the downloader has been configured to ignore
download errors or not, this method may throw an exception or
not when errors are found, after printing the message.
+ tb, if given, is additional traceback information.
if message is not None:
if self.params.get('verbose'):
if tb is None:
- tb = u''.join(traceback.format_list(traceback.extract_stack()))
+ tb_data = traceback.format_list(traceback.extract_stack())
+ tb = u''.join(tb_data)
if not self.params.get('ignoreerrors', False):
raise DownloadError(message)
@@ -497,7 +500,7 @@ def download(self, url_list):
videos = ie.extract(url)
except ExtractorError as de: # An error we somewhat expected
- self.trouble(u'ERROR: ' + compat_str(de), compat_str(u''.join(traceback.format_tb(de.traceback))))
+ self.trouble(u'ERROR: ' + compat_str(de), de.format_traceback())
except Exception as e:
if self.params.get('ignoreerrors', False):
2  youtube_dl/
@@ -117,7 +117,7 @@ def _download_webpage(self, url_or_request, video_id, note=None, errnote=None):
except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
if errnote is None:
errnote = u'Unable to download webpage'
- raise ExtractorError(u'%s: %s' % (errnote, compat_str(err)))
+ raise ExtractorError(u'%s: %s' % (errnote, compat_str(err)), sys.exc_info()[2])
class YoutubeIE(InfoExtractor):
10 youtube_dl/
@@ -8,6 +8,7 @@
import os
import re
import sys
+import traceback
import zlib
import email.utils
import json
@@ -414,12 +415,15 @@ def encodeFilename(s):
class ExtractorError(Exception):
"""Error during info extraction."""
def __init__(self, msg, tb=None):
- """ tb is the original traceback (so that it can be printed out) """
+ """ tb, if given, is the original traceback (so that it can be printed out). """
super(ExtractorError, self).__init__(msg)
- if tb is None:
- tb = sys.exc_info()[2]
self.traceback = tb
+ def format_traceback(self):
+ if self.traceback is None:
+ return None
+ return u''.join(traceback.format_tb(self.traceback))
class DownloadError(Exception):
"""Download Error exception.
Please sign in to comment.
Something went wrong with that request. Please try again.