From d4c2bddd0c768da12d0cefd3c405b10e75fa5aa9 Mon Sep 17 00:00:00 2001 From: Damien George <damien.p.george@gmail.com> Date: Thu, 5 Jun 2014 19:44:54 +0100 Subject: [PATCH] py: Raise TypeError when trying to format non-int with %x,%o,%X. This behaviour follows Python 3.5 standard (in 3.4 it's a DeprecationWarning which we'd rather make a TypeError). --- py/objstr.c | 4 ++-- tests/float/string-format-modulo.py | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/py/objstr.c b/py/objstr.c index 4100b69beb..593c39cb09 100644 --- a/py/objstr.c +++ b/py/objstr.c @@ -1273,7 +1273,7 @@ not_enough_args: if (alt) { flags |= (PF_FLAG_SHOW_PREFIX | PF_FLAG_SHOW_OCTAL_LETTER); } - pfenv_print_mp_int(&pfenv_vstr, arg_as_int(arg), 1, 8, 'a', flags, fill, width); + pfenv_print_mp_int(&pfenv_vstr, arg, 1, 8, 'a', flags, fill, width); break; case 'r': @@ -1296,7 +1296,7 @@ not_enough_args: case 'X': case 'x': - pfenv_print_mp_int(&pfenv_vstr, arg_as_int(arg), 1, 16, *str - ('X' - 'A'), flags | alt, fill, width); + pfenv_print_mp_int(&pfenv_vstr, arg, 1, 16, *str - ('X' - 'A'), flags | alt, fill, width); break; default: diff --git a/tests/float/string-format-modulo.py b/tests/float/string-format-modulo.py index 549b09c1c0..ddca0b5555 100644 --- a/tests/float/string-format-modulo.py +++ b/tests/float/string-format-modulo.py @@ -5,6 +5,12 @@ print("%d" % 1.0) print("%i" % 1.0) print("%u" % 1.0) +# these 3 have different behaviour in Python 3.x versions +# uPy raises a TypeError, following Python 3.5 (earlier versions don't) +#print("%x" % 18.0) +#print("%o" % 18.0) +#print("%X" % 18.0) + print("%e" % 1.23456) print("%E" % 1.23456) print("%f" % 1.23456)