catching syntax errors via excepthook?

Discussion in 'Python' started by Hari Sekhon, Jul 3, 2006.

  1. Hari Sekhon

    Hari Sekhon Guest

    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?
    Or is there a better way?

    -h
     
    Hari Sekhon, Jul 3, 2006
    #1
    1. Advertising

  2. Hari Sekhon <> 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
     
    Alex Martelli, Jul 3, 2006
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Mark Goldin

    Errors, errors, errors

    Mark Goldin, Jan 17, 2004, in forum: ASP .Net
    Replies:
    2
    Views:
    1,009
    Mark Goldin
    Jan 17, 2004
  2. Follower
    Replies:
    1
    Views:
    3,088
    Jeremy Fincher
    Oct 27, 2003
  3. Tim Peters
    Replies:
    0
    Views:
    591
    Tim Peters
    Oct 30, 2003
  4. yawnmoth
    Replies:
    97
    Views:
    4,784
    Bent C Dalager
    Feb 27, 2009
  5. andrea crotti
    Replies:
    7
    Views:
    231
    Prasad, Ramit
    Oct 25, 2012
Loading...

Share This Page