Why won't the run-time error reporter point to the error position with a caret like the syntax error reporter does? It knows exactly where the error is.

Chris Angelico rosuav at gmail.com
Thu Aug 1 03:18:54 EDT 2019


On Thu, Aug 1, 2019 at 4:34 PM Terry Reedy <tjreedy at udel.edu> wrote:
>
> On 7/31/2019 11:19 PM, jsalsman at gmail.com wrote:
> > Honestly this is the only thing in over half a decade of daily python use which has disappointed me enough to want to ask the devs:
> >
> >>>> print(1/)
> >    File "<stdin>", line 1
> >      print(1/)
> >              ^
> > SyntaxError: invalid syntax
>
> SyntaxErrors mostly come from the parser, occasionally from the
> compiler, both of which have access to line and column.
>
> >>>> print(1/1, 1/0, 1/1)
> > Traceback (most recent call last):
> >    File "<stdin>", line 1, in <module>
> > ZeroDivisionError: division by zero
>
> This comes from the runtime engine, which only has access to line
> numbers, and even line numbers lie when a statement spans multiple
> lines.  In CPython, the runtime engine is executing bytecodes, and
> bytecode do not correspond to column numbers.  In something like
> "a + b / (2 * c + d//3)", if the denominator (which could be on multiple
> lines) is 0, where should a caret point?
>

Probably to the slash, since it's the division operation that threw
the error. I don't think it would be all that useful, but it would at
least be sane and logical.

ChrisA



More information about the Python-list mailing list