Make ExtractorError usable for other causes
authorPhilipp Hagemeister <phihag@phihag.de>
Thu, 3 Jan 2013 14:39:55 +0000 (15:39 +0100)
committerPhilipp Hagemeister <phihag@phihag.de>
Thu, 3 Jan 2013 14:39:55 +0000 (15:39 +0100)
youtube_dl/FileDownloader.py
youtube_dl/InfoExtractors.py
youtube_dl/utils.py

index 756fc72ec8e823751e891cdc3e7041506a0f6fe8..55afbdbeda5b85bdcea56bcffe624fc424a43d45 100644 (file)
@@ -216,12 +216,15 @@ class FileDownloader(object):
         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.
         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:
             self.to_stderr(message)
         if self.params.get('verbose'):
             if tb is None:
         """
         if message is not None:
             self.to_stderr(message)
         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)
             self.to_stderr(tb)
         if not self.params.get('ignoreerrors', False):
             raise DownloadError(message)
             self.to_stderr(tb)
         if not self.params.get('ignoreerrors', False):
             raise DownloadError(message)
@@ -497,7 +500,7 @@ class FileDownloader(object):
                 try:
                     videos = ie.extract(url)
                 except ExtractorError as de: # An error we somewhat expected
                 try:
                     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())
                     break
                 except Exception as e:
                     if self.params.get('ignoreerrors', False):
                     break
                 except Exception as e:
                     if self.params.get('ignoreerrors', False):
index 7bea26142fc7a7f09c28037a5635de4a70cb46ce..d040eec8286d22bea075e2ba95d84f2c6dc24775 100755 (executable)
@@ -117,7 +117,7 @@ class InfoExtractor(object):
         except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
             if errnote is None:
                 errnote = u'Unable to download webpage'
         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):
 
 
 class YoutubeIE(InfoExtractor):
index 91e1803265dd88d3c50943c44cbb598fd4a139b1..8f856ee8c073dd9095f2b62b1567eabdb321c117 100644 (file)
@@ -8,6 +8,7 @@ import locale
 import os
 import re
 import sys
 import os
 import re
 import sys
+import traceback
 import zlib
 import email.utils
 import json
 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):
 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)
         super(ExtractorError, self).__init__(msg)
-        if tb is None:
-            tb = sys.exc_info()[2]
         self.traceback = tb
 
         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.
 
 class DownloadError(Exception):
     """Download Error exception.