def run_toplevel(f, *fargs, **fkwds): """Calls f() and handles all OperationErrors. Intended use is to run the main program or one interactive statement. run_protected() handles details like forwarding exceptions to sys.excepthook(), catching SystemExit, etc. """ # don't use try:except: here, otherwise the exception remains # visible in user code. Make sure revdb_stop is a callable, so # that we can call it immediately after finally: below. Doing # so minimizes the number of "blind" lines that we need to go # back from, with "bstep", after we do "continue" in revdb. if '__pypy__' in sys.builtin_module_names: from __pypy__ import revdb_stop else: revdb_stop = None if revdb_stop is None: revdb_stop = lambda: None try: # run it try: f(*fargs, **fkwds) finally: revdb_stop() sys.settrace(None) sys.setprofile(None) except SystemExit as e: handle_sys_exit(e) except BaseException as e: display_exception(e) return False return True # success
def run_toplevel(f, *fargs, **fkwds): """Calls f() and handles all OperationErrors. Intended use is to run the main program or one interactive statement. run_protected() handles details like forwarding exceptions to sys.excepthook(), catching SystemExit, printing a newline after sys.stdout if needed, etc. """ # don't use try:except: here, otherwise the exception remains # visible in user code. Make sure revdb_stop is a callable, so # that we can call it immediately after finally: below. Doing # so minimizes the number of "blind" lines that we need to go # back from, with "bstep", after we do "continue" in revdb. if '__pypy__' in sys.builtin_module_names: from __pypy__ import revdb_stop else: revdb_stop = None if revdb_stop is None: revdb_stop = lambda: None try: # run it try: f(*fargs, **fkwds) finally: revdb_stop() sys.settrace(None) sys.setprofile(None) # we arrive here if no exception is raised. stdout cosmetics... try: stdout = sys.stdout softspace = stdout.softspace except AttributeError: pass # Don't crash if user defined stdout doesn't have softspace else: if softspace: stdout.write('\n') except SystemExit as e: handle_sys_exit(e) except BaseException as e: display_exception(e) return False return True # success