catching syntax errors via excepthook?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Hari Sekhon

    #1

    catching syntax errors via excepthook?

    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(ty pe,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?
    Or is there a better way?

    -h
  • Alex Martelli

    #2
    Re: catching syntax errors via excepthook?

    Hari Sekhon <sekhon.hari@go oglemail.comwro te:
    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(ty pe,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(ty pe,value,tb):
    .... print 'error', value
    ....
    >>sys.excepthoo k=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.p y and/or $PYTHONSTARTUP .


    Alex

    Comment

    Working...