From c3c11f7fb556bc89076d16312e8b3970523a35aa Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Mon, 24 Jan 2011 15:57:50 +0000 Subject: More robust handling of unhandled exceptions --- diff --git a/src/sugar/feedback.py b/src/sugar/feedback.py index 56dacab..770b7a7 100644 --- a/src/sugar/feedback.py +++ b/src/sugar/feedback.py @@ -79,6 +79,11 @@ def _send(activity_id, log_path): log_path if need_log else '') +def _format_exception(exctype, value, tb): + import traceback + return ''.join(traceback.format_exception(exctype, value, tb)) + + def _excepthook(exctype, value, tb): global _log_formatter @@ -89,15 +94,16 @@ def _excepthook(exctype, value, tb): from IPython.ultraTB import AutoFormattedTB formatter = AutoFormattedTB(mode='Verbose', color_scheme='NoColor') _log_formatter = formatter.text - except ImportError: - import traceback - _log_formatter = \ - lambda * args: ''.join(traceback.format_exception(*args)) - - message = _log_formatter(exctype, value, tb) - logging.error(message) - - trigger('unhandled_exception', need_log=True) + except BaseException: + _log_formatter = _format_exception + + try: + message = _log_formatter(exctype, value, tb) + logging.error(message) + trigger('unhandled_exception', need_log=True) + except BaseException, error: + print >>sys.stderr, 'Unhandled %r while processing: %r %r' % \ + (error, exctype, value) sys.excepthook = _excepthook -- cgit v0.9.1