diff options
author | Mark Shannon <mark@hotpy.org> | 2021-05-06 12:38:50 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-06 12:38:50 (GMT) |
commit | 8d4b18429de504445a1338077e495090d91044b4 (patch) | |
tree | 10ce565ceed11df95a29bbfa4299e187d2e07f61 | |
parent | 60ba0b68470a584103e28958d91e93a6db37ec92 (diff) | |
download | cpython-8d4b18429de504445a1338077e495090d91044b4.zip cpython-8d4b18429de504445a1338077e495090d91044b4.tar.gz cpython-8d4b18429de504445a1338077e495090d91044b4.tar.bz2 |
Correct location for syntax error in try-except (GH-25939)
-rw-r--r-- | Lib/test/test_exceptions.py | 2 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2021-05-06-12-43-04.bpo-44056.4LWcJW.rst | 2 | ||||
-rw-r--r-- | Python/compile.c | 2 |
3 files changed, 4 insertions, 2 deletions
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 3c427fe..1fe479f 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -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 index 0000000..24a6581 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-06-12-43-04.bpo-44056.4LWcJW.rst @@ -0,0 +1,2 @@ +Syntax errors when default ``except`` is not the last ``except`` are +reported with the correct location. Patch by Mark Shannon. diff --git a/Python/compile.c b/Python/compile.c index 4fc8b38..d6bcca1 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -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; |