mirror of https://github.com/python/cpython
bpo-43163: Handle unclosed parentheses in codeop (GH-24483)
This commit is contained in:
parent
b74396c316
commit
dbb228189b
|
@ -102,11 +102,20 @@ def _maybe_compile(compiler, source, filename, symbol):
|
|||
try:
|
||||
if code:
|
||||
return code
|
||||
if not code1 and repr(err1) == repr(err2):
|
||||
if not code1 and _is_syntax_error(err1, err2):
|
||||
raise err1
|
||||
finally:
|
||||
err1 = err2 = None
|
||||
|
||||
def _is_syntax_error(err1, err2):
|
||||
rep1 = repr(err1)
|
||||
rep2 = repr(err2)
|
||||
if "was never closed" in rep1 and "was never closed" in rep2:
|
||||
return False
|
||||
if rep1 == rep2:
|
||||
return True
|
||||
return False
|
||||
|
||||
def _compile(source, filename, symbol):
|
||||
return compile(source, filename, symbol, PyCF_DONT_IMPLY_DEDENT)
|
||||
|
||||
|
|
|
@ -135,6 +135,10 @@ class CodeopTests(unittest.TestCase):
|
|||
ai("a = {")
|
||||
ai("b + {")
|
||||
|
||||
ai("print([1,\n2,")
|
||||
ai("print({1:1,\n2:3,")
|
||||
ai("print((1,\n2,")
|
||||
|
||||
ai("if 9==3:\n pass\nelse:")
|
||||
ai("if 9==3:\n pass\nelse:\n")
|
||||
ai("if 9==3:\n pass\nelse:\n pass")
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fix a bug in :mod:`codeop` that was causing it to not ask for more input
|
||||
when multi-line snippets have unclosed parentheses. Patch by Pablo Galindo
|
Loading…
Reference in New Issue