[Python-checkins] bpo-40246: Report a better error message for invalid string prefixes (GH-19476)

Lysandros Nikolaou webhook-mailer at python.org
Sun Apr 12 14:21:07 EDT 2020


https://github.com/python/cpython/commit/41d5b94af44e34ac05d4cd57460ed104ccf96628
commit: 41d5b94af44e34ac05d4cd57460ed104ccf96628
branch: master
author: Lysandros Nikolaou <lisandrosnik at gmail.com>
committer: GitHub <noreply at github.com>
date: 2020-04-12T19:21:00+01:00
summary:

bpo-40246: Report a better error message for invalid string prefixes (GH-19476)

files:
A Misc/NEWS.d/next/Core and Builtins/2020-04-11-17-52-03.bpo-40246.vXPze5.rst
M Include/errcode.h
M Lib/test/test_fstring.py
M Parser/tokenizer.c
M Python/pythonrun.c

diff --git a/Include/errcode.h b/Include/errcode.h
index b37cd261d5ec4..9af8d5c03d59b 100644
--- a/Include/errcode.h
+++ b/Include/errcode.h
@@ -31,6 +31,7 @@ extern "C" {
 #define E_LINECONT      25      /* Unexpected characters after a line continuation */
 #define E_IDENTIFIER    26      /* Invalid characters in identifier */
 #define E_BADSINGLE     27      /* Ill-formed single statement input */
+#define E_BADPREFIX     28      /* Bad string prefixes */
 
 #ifdef __cplusplus
 }
diff --git a/Lib/test/test_fstring.py b/Lib/test/test_fstring.py
index 49663923e7f5a..ef0ccb8cf53c1 100644
--- a/Lib/test/test_fstring.py
+++ b/Lib/test/test_fstring.py
@@ -841,7 +841,7 @@ def test_nested_fstrings(self):
         self.assertEqual(f'{f"{y}"*3}', '555')
 
     def test_invalid_string_prefixes(self):
-        self.assertAllRaise(SyntaxError, 'unexpected EOF while parsing',
+        self.assertAllRaise(SyntaxError, 'invalid string prefix',
                             ["fu''",
                              "uf''",
                              "Fu''",
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-04-11-17-52-03.bpo-40246.vXPze5.rst b/Misc/NEWS.d/next/Core and Builtins/2020-04-11-17-52-03.bpo-40246.vXPze5.rst
new file mode 100644
index 0000000000000..056b7f8472912
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-04-11-17-52-03.bpo-40246.vXPze5.rst	
@@ -0,0 +1 @@
+Report a specialized error message, `invalid string prefix`, when the tokenizer encounters a string with an invalid prefix.
\ No newline at end of file
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index c650442a4a7fb..97986aa8ef40a 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -1392,6 +1392,10 @@ tok_get(struct tok_state *tok, const char **p_start, const char **p_end)
         if (nonascii && !verify_identifier(tok)) {
             return ERRORTOKEN;
         }
+        if (c == '"' || c == '\'') {
+            tok->done = E_BADPREFIX;
+            return ERRORTOKEN;
+        }
         *p_start = tok->start;
         *p_end = tok->cur;
 
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 95571a8c7518a..eb9159f1b5c52 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -1574,6 +1574,9 @@ err_input(perrdetail *err)
     case E_BADSINGLE:
         msg = "multiple statements found while compiling a single statement";
         break;
+    case E_BADPREFIX:
+        msg = "invalid string prefix";
+        break;
     default:
         fprintf(stderr, "error=%d\n", err->error);
         msg = "unknown parsing error";



More information about the Python-checkins mailing list