Author ghewgill
Recipients ghewgill
Date 2009-11-23.10:04:12
SpamBayes Score 0.0
Marked as misclassified No
Message-id <1258970662.35.0.76558630095.issue7378@psf.upfronthosting.co.za>
In-reply-to
Content
Quite by accident, I came across a case where Python would quit
generating traceback text and skip printing the actual exception
information. Here is a sample program:

    exec(compile("spam()", ".", "exec"))

and the output in Python 3.1 ("spam" is undefined):

    $ python3.1 test.py
    Traceback (most recent call last):
      File "test.py", line 1, in <module>
        exec(compile("spam()", ".", "exec"))
      File ".", line 1, in <module>
    $

This was bewildering until I realised that the traceback generator was
unable to read from the filename passed to compile() (my original
example was using a name other than "." that wasn't intended to be a
file name, but just happened to also be a directory name). I didn't
really mind the lack of source text, but the lack of the actual
exception message was most disturbing.

This appears to be a failure mode common to both traceback.c and
traceback.py, through slightly different mechanisms. In traceback.c, if
the source filename refers to a directory, the C open() succeeds but an
error occurs when trying to read from the directory handle. In 
traceback.py, the Python open() call fails with an IOError exception, 
and the exception wasn't handled gracefully.

I have attached a patch that creates the following output instead:

    $ ./python.exe test.py
    Traceback (most recent call last):
      File "test.py", line 1, in <module>
        exec(compile("spam()", ".", "exec"))
      File ".", line 1, in <module>
        [Errno 21] Is a directory: '.'
    NameError: name 'spam' is not defined
    $
    
I have tested the patch against Python 3.1, but it applies cleanly to 
the trunk (for some reason I couldn't make the trunk build, but that's 
unrelated). This patch may need some finesse for a Win32 build; I don't
have the ability to test that at the moment.
History
Date User Action Args
2009-11-23 10:04:22ghewgillsetrecipients: + ghewgill
2009-11-23 10:04:22ghewgillsetmessageid: <1258970662.35.0.76558630095.issue7378@psf.upfronthosting.co.za>
2009-11-23 10:04:20ghewgilllinkissue7378 messages
2009-11-23 10:04:16ghewgillcreate