Source code for visidata.errors

import traceback

from visidata import vd, VisiData

vd.option('debug', False, 'exit on error and display stacktrace')


[docs]class ExpectedException(Exception): 'Controlled Exception from fail() or confirm(). Status or other interface update is done by raiser.' pass
def stacktrace(e=None): if not e: return traceback.format_exc().strip().splitlines() return traceback.format_exception_only(type(e), e) @VisiData.api def exceptionCaught(vd, exc=None, status=True, **kwargs): 'Add *exc* to list of last errors and add to status history. Show on left status bar if *status* is True. Reraise exception if options.debug is True.' if isinstance(exc, ExpectedException): # already reported, don't log return vd.lastErrors.append(stacktrace()) if status: vd.status(f'{type(exc).__name__}: {exc}', priority=2) else: vd.addToStatusHistory(vd.lastErrors[-1][-1]) if vd.options.debug: raise vd.addGlobals(stacktrace=stacktrace, ExpectedException=ExpectedException) # see textsheet.py for ErrorSheet and associated commands