summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--py/objstr.c2
-rw-r--r--tests/basics/string_format_cp310.py9
-rw-r--r--tests/basics/string_format_cp310.py.exp4
-rw-r--r--tests/basics/string_format_error.py2
4 files changed, 15 insertions, 2 deletions
diff --git a/py/objstr.c b/py/objstr.c
index 7d7f0e1df..321bb058d 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -1163,7 +1163,7 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
s++;
}
if (*s == '0') {
- if (!align) {
+ if (!align && arg_looks_numeric(arg)) {
align = '=';
}
if (!fill) {
diff --git a/tests/basics/string_format_cp310.py b/tests/basics/string_format_cp310.py
new file mode 100644
index 000000000..77295330b
--- /dev/null
+++ b/tests/basics/string_format_cp310.py
@@ -0,0 +1,9 @@
+# Python 3.10+ functionality test for {} format string
+
+def test(fmt, *args):
+ print('{:8s}'.format(fmt) + '>' + fmt.format(*args) + '<')
+
+test("{:0s}", "ab")
+test("{:06s}", "ab")
+test("{:<06s}", "ab")
+test("{:>06s}", "ab")
diff --git a/tests/basics/string_format_cp310.py.exp b/tests/basics/string_format_cp310.py.exp
new file mode 100644
index 000000000..1c26473d8
--- /dev/null
+++ b/tests/basics/string_format_cp310.py.exp
@@ -0,0 +1,4 @@
+{:0s} >ab<
+{:06s} >ab0000<
+{:<06s} >ab0000<
+{:>06s} >0000ab<
diff --git a/tests/basics/string_format_error.py b/tests/basics/string_format_error.py
index 708348d59..74dc6c52e 100644
--- a/tests/basics/string_format_error.py
+++ b/tests/basics/string_format_error.py
@@ -1,7 +1,7 @@
# tests for errors in {} format string
try:
- '{0:0}'.format('zzz')
+ '{0:=}'.format('zzz')
except (ValueError):
print('ValueError')