Properly re-raise exceptions during streaming
authorAaron Hill <aa1ronham@gmail.com>
Sat, 5 Nov 2016 23:08:13 +0000 (19:08 -0400)
committerAaron Hill <aa1ronham@gmail.com>
Sat, 5 Nov 2016 23:08:13 +0000 (19:08 -0400)
tweepy/streaming.py

index e6fb0b90f78127169ca57b2a2576ca8db59b73f1..c67047c6fdac87c79da2f9a5ad0b4b0549b44eb6 100644 (file)
@@ -9,6 +9,7 @@ from __future__ import absolute_import, print_function
 import logging
 import re
 import requests
+import sys
 from requests.exceptions import Timeout
 from threading import Thread
 from time import sleep
@@ -230,7 +231,7 @@ class Stream(object):
         # Connect and process the stream
         error_counter = 0
         resp = None
-        exception = None
+        exc_info = None
         while self.running:
             if self.retry_count is not None:
                 if error_counter > self.retry_count:
@@ -267,7 +268,7 @@ class Stream(object):
                 # If it's not time out treat it like any other exception
                 if isinstance(exc, ssl.SSLError):
                     if not (exc.args and 'timed out' in str(exc.args[0])):
-                        exception = exc
+                        exc_info = sys.exc_info()
                         break
                 if self.listener.on_timeout() is False:
                     break
@@ -277,7 +278,9 @@ class Stream(object):
                 self.snooze_time = min(self.snooze_time + self.snooze_time_step,
                                        self.snooze_time_cap)
             except Exception as exc:
-                exception = exc
+                exc_info = sys.exc_info()
+                print(exc_info)
+                import pdb; pdb.post_mortem(exc_info[2])
                 # any other exception is fatal, so kill loop
                 break
 
@@ -288,10 +291,10 @@ class Stream(object):
 
         self.new_session()
 
-        if exception:
+        if exc_info:
             # call a handler first so that the exception can be logged.
-            self.listener.on_exception(exception)
-            raise exception
+            self.listener.on_exception(exc_info[1])
+            six.reraise(*exc_info)
 
     def _data(self, data):
         if self.listener.on_data(data) is False: