import sys, signal, time def trace(frame, event, arg): funcname = frame.f_code.co_name if event == 'call': print('tracing', funcname) if funcname == 'foo': time.sleep(1) return trace def foo(): pass def handler(*args): 1/0 sys.settrace(trace) signal.signal(signal.SIGALRM, handler) signal.alarm(1) try: foo() except ZeroDivisionError: print('Got ZeroDivisionError.') print('trace function:', sys.gettrace())