On Fri, 13 Aug 2010 11:56:31 am Pete wrote: > Hi, > > I've been writing some code which uses callbacks. I have not used > callbacks much before, but it does not seem too difficult so far. > > One thing though - I noticed that when an exception is raised in the > callback function, that exception doesn't actually "show up" in the > calling program. > > Two questions: > > 1) Theoretically - why is this? I guess I've seen callback functions > a little like subroutines, therefore it seems intuitive that an > exception would be propagated up to the calling routine.
They are, unless the calling function explicitly catches and subpresses the exception. > 2) How can you catch an exception in the callback function? The same way you catch an exception anywhere: with a try...except block. If you are writing a callback function, and want to catch your own exception: def callback(): try: do_stuff_here except (KeyError, ValueError, TypeError): # or whatever pass If you are writing the calling function: def caller(arg, callback): do_something_with(arg) try: callback() except (AttributeError, RecursionError): # or whatever pass By the way, don't be tempted to write a bare except clause: try: ... except: ... There are very few reasons for such a thing, as they are too broad and catch too many things, masking errors, preventing user keyboard interrupts, etc. Avoid them. -- Steven D'Aprano _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor