[Python-ideas] Reporting unmatched parentheses in SyntaxError messages?
tjreedy at udel.edu
Thu Jul 9 00:03:11 CEST 2015
On 7/8/2015 1:53 AM, Nick Coghlan wrote:
> One of the more opaque error messages new Python users can encounter
> is a syntax error due to unmatched parentheses:
> File "/home/me/myfile.py", line 11
> data = func()
> SyntaxError: invalid syntax
> I'm not sure it would be feasible though - we generate syntax errors
> from a range of locations where we don't have access to the original
> token data any more :(
Could that be changed?
An alternate approach is a separate fence-matcher function. Before I
switched to Python 17+ years ago, I wrote a table-driven
finite-state-machine matcher in C and a complete table for K&R/C89 C,
which included info that openers were be be ignored within comments and
strings. It reported the line and column of unclosed openers. I wrote it
for my own use because I was frustrated by poor C compiler error messages.
I have occasionally thought about developing a table for Python (and
rewriting in Python), but indents and dedents are not trivial. (Even
tokenizer.py does not handle \t indents correctly.) Maybe I should
think a bit harder. Idle has an option to syntax-check a module without
running it. If compile messages are not improved, it would certainly be
sensible to run a separate fence-checker at least when check-only is
requested, for better error messages. These could potentially include
'missing :' when a header 'opened' by
for/while/if/elif/else/class/def/with is not closed by ':'.
Terry Jan Reedy
More information about the Python-ideas