Hari Sekhon <[EMAIL PROTECTED]> wrote: > I've written an except hook into a script as shown below which works > well for the most part and catches exceptions. > > import sys > def myexcepthook(type,value,tb): > do something > > sys.excepthook=myexcepthook > rest of script.... (now protected by catchall exception hook) > > > I've been intentionally introducing errors into the code to try to test > it and while it catches import errors and other things, it doesn't catch > syntax errors. > > Is there a way to get it to catch syntax errors?
Python, of course, parses (and in fact compiles) a whole module before executing any of it, so if you're talking about syntax error in the source of the very module which (when executed) will install an excepthook, no way. Apart from this, no problem, e.g.: >>> def myexcepthook(type,value,tb): ... print 'error', value ... >>> sys.excepthook=myexcepthook >>> 2+ error invalid syntax (<stdin>, line 1) >>> m=open('za.py', 'w') >>> m.writelines('''print "hello" ... print 2+ ... ''') >>> m.close() >>> import za error invalid syntax (za.py, line 2) etc, etc, i.e., the hook does catch all syntax errors due to parsing which occurs *after* the hook is installed (in interactive sessions or other modules). Clearly the hook cannot catch any error which occur *before* the hook is installed. You can delay the detection of syntax errors, for example, by explicitly calling the compile built-in function on string literals, rather than relying on implicit compilation of sources; and/or you can strive to have your excepthook installed ASAP, e.g. by playing with sitecustomize.py and/or $PYTHONSTARTUP . Alex -- http://mail.python.org/mailman/listinfo/python-list