diff options
author | Jeff Epler <jepler@gmail.com> | 2024-01-03 19:31:35 -0600 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2025-01-26 22:54:58 +1100 |
commit | 13b13d1fdd05549d504eeded0b5aa8871d5e5dcf (patch) | |
tree | 0cd66eb9e2e2cb2ca0c6904c0093bf59ed77c1cb /py/parsenum.c | |
parent | 7b3f189b1723fe642f122a3b7826d16fe32f801a (diff) | |
download | micropython-13b13d1fdd05549d504eeded0b5aa8871d5e5dcf.tar.gz micropython-13b13d1fdd05549d504eeded0b5aa8871d5e5dcf.zip |
py/parsenum: Throw an exception for invalid int literals like "01".
This includes making int("01") parse in base 10 like standard Python.
When a base of 0 is specified it means auto-detect based on the prefix, and
literals begining with 0 (except when the literal is all 0's) like "01" are
then invalid and now throw an exception.
The new error message is different from CPython. It says e.g.,
`SyntaxError: invalid syntax for integer with base 0: '09'`
Additional test cases were added to cover the changed & added code.
Co-authored-by: Damien George <damien@micropython.org>
Signed-off-by: Jeff Epler <jepler@gmail.com>
Diffstat (limited to 'py/parsenum.c')
-rw-r--r-- | py/parsenum.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/py/parsenum.c b/py/parsenum.c index b33ffb6ff2..27d6641198 100644 --- a/py/parsenum.c +++ b/py/parsenum.c @@ -151,13 +151,13 @@ value_error: raise_exc(exc, lex); #elif MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_NORMAL mp_obj_t exc = mp_obj_new_exception_msg_varg(&mp_type_ValueError, - MP_ERROR_TEXT("invalid syntax for integer with base %d"), base); + MP_ERROR_TEXT("invalid syntax for integer with base %d"), base == 1 ? 0 : base); raise_exc(exc, lex); #else vstr_t vstr; mp_print_t print; vstr_init_print(&vstr, 50, &print); - mp_printf(&print, "invalid syntax for integer with base %d: ", base); + mp_printf(&print, "invalid syntax for integer with base %d: ", base == 1 ? 0 : base); mp_str_print_quoted(&print, str_val_start, top - str_val_start, true); mp_obj_t exc = mp_obj_new_exception_arg1(&mp_type_ValueError, mp_obj_new_str_from_utf8_vstr(&vstr)); |