Forráskód Böngészése

Make ExtractorError usable for other causes

Philipp Hagemeister 12 éve
szülő
commit
01951dda7a

+ 5 - 2
youtube_dl/FileDownloader.py

@@ -216,12 +216,15 @@ class FileDownloader(object):
         Depending on if the downloader has been configured to ignore
         Depending on if the downloader has been configured to ignore
         download errors or not, this method may throw an exception or
         download errors or not, this method may throw an exception or
         not when errors are found, after printing the message.
         not when errors are found, after printing the message.
+
+        tb, if given, is additional traceback information.
         """
         """
         if message is not None:
         if message is not None:
             self.to_stderr(message)
             self.to_stderr(message)
         if self.params.get('verbose'):
         if self.params.get('verbose'):
             if tb is None:
             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)
             self.to_stderr(tb)
         if not self.params.get('ignoreerrors', False):
         if not self.params.get('ignoreerrors', False):
             raise DownloadError(message)
             raise DownloadError(message)
@@ -497,7 +500,7 @@ class FileDownloader(object):
                 try:
                 try:
                     videos = ie.extract(url)
                     videos = ie.extract(url)
                 except ExtractorError as de: # An error we somewhat expected
                 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
                     break
                 except Exception as e:
                 except Exception as e:
                     if self.params.get('ignoreerrors', False):
                     if self.params.get('ignoreerrors', False):

+ 1 - 1
youtube_dl/InfoExtractors.py

@@ -117,7 +117,7 @@ class InfoExtractor(object):
         except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
         except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
             if errnote is None:
             if errnote is None:
                 errnote = u'Unable to download webpage'
                 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):

+ 7 - 3
youtube_dl/utils.py

@@ -8,6 +8,7 @@ import locale
 import os
 import os
 import re
 import re
 import sys
 import sys
+import traceback
 import zlib
 import zlib
 import email.utils
 import email.utils
 import json
 import json
@@ -414,12 +415,15 @@ def encodeFilename(s):
 class ExtractorError(Exception):
 class ExtractorError(Exception):
     """Error during info extraction."""
     """Error during info extraction."""
     def __init__(self, msg, tb=None):
     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):
 class DownloadError(Exception):
     """Download Error exception.
     """Download Error exception.