~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/trace.py

Better formatting of builtin errors

Show diffs side-by-side

added added

removed removed

Lines of Context:
60
60
import logging
61
61
import traceback
62
62
 
 
63
from bzrlib.errors import BzrNewError
 
64
 
63
65
 
64
66
_file_handler = None
65
67
_stderr_handler = None
243
245
 
244
246
    This is used for display to stderr.  It specially handles exception
245
247
    classes without useful string methods.
 
248
 
 
249
    The result has no trailing newline.
246
250
    """
247
251
    exc_type, exc_info, exc_tb = sys.exc_info()
248
 
    msg = None
249
 
    if msg == None:
250
 
        msg = str(exc_info)
251
 
    if msg and (msg[-1] == '\n'):
252
 
        msg = msg[:-1]
253
 
    ## msg += '\n  command: %s' % ' '.join(repr(arg) for arg in sys.argv)
254
 
    ## msg += '\n      pwd: %r' % os.getcwdu()
255
 
    ## msg += '\n    error: %s' % exc_type
256
 
    return msg
 
252
    if exc_type is None:
 
253
        return '(no exception)'
 
254
    if isinstance(exc_info, BzrNewError):
 
255
        return str(exc_info)
 
256
    else:
 
257
        import traceback
 
258
        tb = traceback.extract_tb(exc_tb)
 
259
        msg = '%s: %s' % (exc_type, exc_info)
 
260
        if msg[-1] == '\n':
 
261
            msg = msg[:-1]
 
262
        if tb:
 
263
            msg += '\n  at %s line %d\n  in %s' % (tb[-1][:3])
 
264
        return msg