]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Correct location for syntax error in try-except (GH-25939)
authorMark Shannon <mark@hotpy.org>
Thu, 6 May 2021 12:38:50 +0000 (13:38 +0100)
committerGitHub <noreply@github.com>
Thu, 6 May 2021 12:38:50 +0000 (13:38 +0100)
Lib/test/test_exceptions.py
Misc/NEWS.d/next/Core and Builtins/2021-05-06-12-43-04.bpo-44056.4LWcJW.rst [new file with mode: 0644]
Python/compile.c

index 3c427fed5611832d986b85caa845b3c23b8d20ee..1fe479fbe83092f9100cf65ff06ec346be102459 100644 (file)
@@ -218,7 +218,7 @@ class ExceptionTests(unittest.TestCase):
         check('class foo:return 1', 1, 11)
         check('def f():\n  continue', 2, 3)
         check('def f():\n  break', 2, 3)
-        check('try:\n  pass\nexcept:\n  pass\nexcept ValueError:\n  pass', 2, 3)
+        check('try:\n  pass\nexcept:\n  pass\nexcept ValueError:\n  pass', 3, 1)
 
         # Errors thrown by tokenizer.c
         check('(0x+1)', 1, 3)
diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-06-12-43-04.bpo-44056.4LWcJW.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-06-12-43-04.bpo-44056.4LWcJW.rst
new file mode 100644 (file)
index 0000000..24a6581
--- /dev/null
@@ -0,0 +1,2 @@
+Syntax errors when default ``except`` is not the last ``except``  are
+reported with the correct location. Patch by Mark Shannon.
index 4fc8b38d978289fea9694ba9d69429980387abe2..d6bcca1c02483d62db17d74774b7aca8af6ba725 100644 (file)
@@ -3165,9 +3165,9 @@ compiler_try_except(struct compiler *c, stmt_ty s)
     for (i = 0; i < n; i++) {
         excepthandler_ty handler = (excepthandler_ty)asdl_seq_GET(
             s->v.Try.handlers, i);
+        SET_LOC(c, handler);
         if (!handler->v.ExceptHandler.type && i < n-1)
             return compiler_error(c, "default 'except:' must be last");
-        SET_LOC(c, handler);
         except = compiler_new_block(c);
         if (except == NULL)
             return 0;