server: Log additional information for discovery

discovery_error is called from both exception and normal
execution contexts.

In exception context print_exception prints the exception
class and message.  Print the exception class and message
when invoked in normal context.

Resolves: openbmc/openbmc#2718

Change-Id: Ia6ab9c9d663161028f47e17af2f73bfe801af399
Signed-off-by: Brad Bishop <bradleyb@@fuzziesquirrel.com>
diff --git a/obmc/mapper/server.py b/obmc/mapper/server.py
index de5d65d..d18c609 100644
--- a/obmc/mapper/server.py
+++ b/obmc/mapper/server.py
@@ -270,11 +270,19 @@
         we were attempting to introspect.'''
 
         if owner in self.defer_signals:
+
+            # Safe to add a reference to the traceback here,
+            # since it cannot contain the discovery_error frame.
+            exctype, value, tb = sys.exc_info()
             sys.stderr.write(
                 '{} discovery failure on {}\n'.format(
                     self.bus_map.get(owner, owner),
                     path))
-            traceback.print_exception(*sys.exc_info(), file=sys.stderr)
+            if tb:
+                traceback.print_exception(exctype, value, tb, file=sys.stderr)
+            else:
+                sys.stderr.write('{}: {}\n'.format(e.__class__.__name__, e))
+
             del self.defer_signals[owner]
             del self.bus_map[owner]