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 pypy-issue@python.org https://mail.python.org/mailman/listinfo/pypy-issue