import itertools as it def gen_int(): while True: yield 1 def gen_float(): while True: yield 1.0 def gen_tuple(): while True: yield ('a', 1) # steak sauce def catch_sig_int(f, gen): try: print('Running {}'.format(repr(f))) f(gen()) except KeyboardInterrupt: print("Caught Keyboard Interrupt!") # Try to interrupt a variety of builtin functions catch_sig_int(sum, gen_int) catch_sig_int(sum, gen_float) catch_sig_int(max, gen_int) catch_sig_int(max, gen_float) catch_sig_int(min, gen_int) catch_sig_int(min, gen_float) catch_sig_int(list, gen_int) catch_sig_int(list, gen_float) catch_sig_int(dict, gen_tuple) catch_sig_int(set, gen_int) catch_sig_int(tuple, gen_int)