[Python-Dev] SyntaxError for illegal literals

M.-A. Lemburg mal@lemburg.com
Wed, 14 Feb 2001 11:19:48 +0100


Thomas Wouters wrote:
> 
> On Tue, Feb 13, 2001 at 03:11:10PM -0800, Ka-Ping Yee wrote:
> 
> > The strongest reason is that a long file with a typo in a string
> > literal somewhere in hundreds of lines of code generates only
> 
> >     ValueError: invalid \x escape
> 
> > with no indication to where the error is -- not even which file!
> > I realize this could be hacked upon and fixed, but i think it points
> > to a general inconsistency that ought to be considered and addressed.
> 
> This has nothing to do with the error being a ValueError, but with some
> (compile-time) errors not being promoted to 'full' errors. See
> 
> https://sourceforge.net/patch/?func=detailpatch&patch_id=101782&group_id=5470
> 
> The same issue came up when importing modules that did 'from foo import *'
> in a function scope.

Right and I think this touches the core of the problem. SyntaxErrors
produce a proper traceback while ValueErrors (and others) just print
a single line which doesn't even have the filename or line number.

I wonder why the PyErr_PrintEx() (pythonrun.c) error handler only 
tries to parse SyntaxErrors for .filename and .lineno parameters. Looking
at compile.c these should be settable on all exception object
(since these are now proper instances).

Perhaps lifting the restriction in PyErr_PrintEx() and making the
parse_syntax_error() API a little more robust might do the trick.
Then the various direct PyErr_SetString() calls in compile.c
should be converted to use com_error() instead (if possible).

-- 
Marc-Andre Lemburg
______________________________________________________________________
Company:                                        http://www.egenix.com/
Consulting:                                    http://www.lemburg.com/
Python Pages:                           http://www.lemburg.com/python/