summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchgnrdv <52372310+chgnrdv@users.noreply.github.com>2023-04-15 08:53:31 +0300
committerGitHub <noreply@github.com>2023-04-15 06:53:31 +0100
commit2b6f5c3483597abcb8422508aeffab04f500f568 (patch)
tree6b2d4905acf15014f334c287b5c5f7bf498c48bc
parent8af8f52d175959f03cf4a2786b6a81ec09e15e95 (diff)
downloadcpython-git-2b6f5c3483597abcb8422508aeffab04f500f568.tar.gz
gh-102114: Make dis print more concise tracebacks for syntax errors in str inputs (#102115)
-rw-r--r--Lib/dis.py6
-rw-r--r--Lib/test/test_dis.py7
-rw-r--r--Misc/NEWS.d/next/Library/2023-02-21-14-57-34.gh-issue-102114.uUDQzb.rst1
3 files changed, 11 insertions, 3 deletions
diff --git a/Lib/dis.py b/Lib/dis.py
index b39b283533..6a7fcb8a1a 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 0a60a97961..2d5c73c9ad 100644
--- a/Lib/test/test_dis.py
+++ b/Lib/test/test_dis.py
@@ -1067,6 +1067,13 @@ class DisTests(DisTestBase):
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 0000000000..4140c9a96c
--- /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.