summaryrefslogtreecommitdiff
path: root/pysnmp/carrier
diff options
context:
space:
mode:
authorelie <elie>2013-06-26 15:44:44 +0000
committerelie <elie>2013-06-26 15:44:44 +0000
commit42b77241693f023243c500f3f546118ddf4b1256 (patch)
tree4f5261521d70440f170cd5e0db2f6d0fdcfd0be4 /pysnmp/carrier
parent20a21e04fdb09ff2e36822ac539c24ad80628e6c (diff)
downloadpysnmp-42b77241693f023243c500f3f546118ddf4b1256.tar.gz
exception re-raising improved at asynsock/twisted dispatchers so that
original traceback is preserved and reported
Diffstat (limited to 'pysnmp/carrier')
-rw-r--r--pysnmp/carrier/asynsock/dispatch.py3
-rw-r--r--pysnmp/carrier/twisted/dispatch.py10
2 files changed, 8 insertions, 5 deletions
diff --git a/pysnmp/carrier/asynsock/dispatch.py b/pysnmp/carrier/asynsock/dispatch.py
index 8df5542..d232f87 100644
--- a/pysnmp/carrier/asynsock/dispatch.py
+++ b/pysnmp/carrier/asynsock/dispatch.py
@@ -1,6 +1,7 @@
# Implements I/O over asynchronous sockets
from time import time
from sys import exc_info
+from traceback import format_exception
from asyncore import socket_map
from asyncore import loop
from pysnmp.carrier.base import AbstractTransportDispatcher
@@ -37,5 +38,5 @@ class AsynsockDispatcher(AbstractTransportDispatcher):
except KeyboardInterrupt:
raise
except:
- raise PySnmpError('poll error: %s' % exc_info()[1])
+ raise PySnmpError('poll error: %s' % ';'.join(format_exception(*exc_info())))
self.handleTimerTick(time())
diff --git a/pysnmp/carrier/twisted/dispatch.py b/pysnmp/carrier/twisted/dispatch.py
index 4f77cd0..cb663b8 100644
--- a/pysnmp/carrier/twisted/dispatch.py
+++ b/pysnmp/carrier/twisted/dispatch.py
@@ -8,10 +8,10 @@
#
# Description: Transport dispatcher based on twisted.internet.reactor
#
-import sys, time
+import sys, time, traceback
from twisted.internet import reactor, task
from pysnmp.carrier.base import AbstractTransportDispatcher
-from pysnmp.carrier import error
+from pysnmp.error import PySnmpError
class TwistedDispatcher(AbstractTransportDispatcher):
"""TransportDispatcher based on twisted.internet.reactor"""
@@ -28,8 +28,10 @@ class TwistedDispatcher(AbstractTransportDispatcher):
if not reactor.running:
try:
reactor.run()
- except Exception:
- raise error.CarrierError(sys.exc_info()[1])
+ except KeyboardInterrupt:
+ raise
+ except:
+ raise PySnmpError('reactor error: %s' % ';'.join(traceback.format_exception(*sys.exc_info())))
# jobstarted/jobfinished might be okay as-is