New issue 2011: RPython: Better error message for obvious type errors
https://bitbucket.org/pypy/pypy/issue/2011/rpython-better-error-message-for-obvious
Ronan Lamy:
Consider this code:
```
#!python
def entry_point(argv):
print len([0, 1][0])
return 0
def target(*args):
return entry_point, None
```
Currently, translating it fails with
```
[translation:ERROR] MissingRTypeOperation: unimplemented operation: 'len' on
<IntegerRepr Signed>
[translation:ERROR] .. (targ:1)entry_point
[translation:ERROR] .. block@9 with 1 exits
[translation:ERROR] .. v28 = len(v27)
```
which tends to confuse users. The problem, calling `len()` on an int, could
easily be detected during annotation. If we raised an AnnotationError, we could
have a much nicer error message, for instance:
```
[translation:ERROR] AnnotatorError:
[translation:ERROR]
[translation:ERROR] Object has no len()
[translation:ERROR]
[translation:ERROR]
[translation:ERROR] v1 = len(v0)
[translation:ERROR]
[translation:ERROR] In <FunctionGraph of (targ:1)entry_point at 0x2bbb0d0>:
[translation:ERROR] Happened at file targ.py line 2
[translation:ERROR]
[translation:ERROR] ==> print len([0, 1][0])
[translation:ERROR]
[translation:ERROR] Known variable annotations:
[translation:ERROR] v0 = SomeInteger(knowntype=int, nonneg=True,
unsigned=False)
[translation:ERROR]
[translation:ERROR] Processing block:
[translation:ERROR] block@9 is a <class
'rpython.flowspace.flowcontext.SpamBlock'>
[translation:ERROR] in (targ:1)entry_point
[translation:ERROR] containing the following operations:
[translation:ERROR] v2 = newlist((0), (1))
[translation:ERROR] v0 = getitem(v2, (0))
[translation:ERROR] v1 = len(v0)
[translation:ERROR] v3 = str(v1)
[translation:ERROR] v4 = simple_call((function rpython_print_item), v3)
[translation:ERROR] v5 = simple_call((function rpython_print_newline))
[translation:ERROR] --end--
```
Note that `len()` is just an example, there are many similar cases, including
those where the error message is the dreaded "Blocked block -- operation cannot
succeed" instead of MissingRTypeOperation.
_______________________________________________
pypy-issue mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-issue