From 2b6f5c3483597abcb8422508aeffab04f500f568 Mon Sep 17 00:00:00 2001 From: chgnrdv <52372310+chgnrdv@users.noreply.github.com> Date: Sat, 15 Apr 2023 08:53:31 +0300 Subject: [PATCH] gh-102114: Make dis print more concise tracebacks for syntax errors in str inputs (#102115) --- Lib/dis.py | 6 +++--- Lib/test/test_dis.py | 7 +++++++ .../Library/2023-02-21-14-57-34.gh-issue-102114.uUDQzb.rst | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2023-02-21-14-57-34.gh-issue-102114.uUDQzb.rst diff --git a/Lib/dis.py b/Lib/dis.py index b39b2835330135..6a7fcb8a1a0071 100644 --- a/Lib/dis.py +++ b/Lib/dis.py @@ -64,10 +64,10 @@ def _try_compile(source, name): expect code objects """ try: - c = compile(source, name, 'eval') + return compile(source, name, 'eval') except SyntaxError: - c = compile(source, name, 'exec') - return c + pass + return compile(source, name, 'exec') def dis(x=None, *, file=None, depth=None, show_caches=False, adaptive=False): """Disassemble classes, methods, functions, and other compiled objects. diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index 0a60a979614d52..2d5c73c9adc920 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -1067,6 +1067,13 @@ def check(expected, **kwargs): check(dis_nested_2, depth=None) check(dis_nested_2) + def test__try_compile_no_context_exc_on_error(self): + # see gh-102114 + try: + dis._try_compile(")", "") + except Exception as e: + self.assertIsNone(e.__context__) + @staticmethod def code_quicken(f, times=ADAPTIVE_WARMUP_DELAY): for _ in range(times): diff --git a/Misc/NEWS.d/next/Library/2023-02-21-14-57-34.gh-issue-102114.uUDQzb.rst b/Misc/NEWS.d/next/Library/2023-02-21-14-57-34.gh-issue-102114.uUDQzb.rst new file mode 100644 index 00000000000000..4140c9a96cd272 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-02-21-14-57-34.gh-issue-102114.uUDQzb.rst @@ -0,0 +1 @@ +Functions in the :mod:`dis` module that accept a source code string as argument now print a more concise traceback when the string contains a syntax or indentation error.