mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-88535: Improve syntax error for wrongly closed strings (#26633)
This commit is contained in:
parent
56eda25633
commit
6fb5138776
6 changed files with 1098 additions and 930 deletions
|
@ -165,7 +165,7 @@ Improved error messages
|
|||
error message prints the received number of values in more cases than before.
|
||||
(Contributed by Tushar Sadhwani in :gh:`122239`.)
|
||||
|
||||
.. code-block:: pycon
|
||||
.. code-block:: python
|
||||
|
||||
>>> x, y, z = 1, 2, 3, 4
|
||||
Traceback (most recent call last):
|
||||
|
@ -175,6 +175,17 @@ Improved error messages
|
|||
ValueError: too many values to unpack (expected 3, got 4)
|
||||
|
||||
|
||||
* When incorrectly closed strings are detected, the error message suggests
|
||||
that the string may be intended to be part of the string. (Contributed by
|
||||
Pablo Galindo in :gh:`88535`.)
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> "The interesting object "The important object" is very important"
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: invalid syntax. Is this intended to be part of the string?
|
||||
|
||||
|
||||
.. _whatsnew314-pep741:
|
||||
|
||||
PEP 741: Python Configuration C API
|
||||
|
|
|
@ -1178,6 +1178,9 @@ invalid_type_param:
|
|||
}
|
||||
|
||||
invalid_expression:
|
||||
| STRING a=(!STRING expression_without_invalid)+ STRING {
|
||||
RAISE_SYNTAX_ERROR_KNOWN_RANGE( PyPegen_first_item(a, expr_ty), PyPegen_last_item(a, expr_ty),
|
||||
"invalid syntax. Is this intended to be part of the string?") }
|
||||
# !(NAME STRING) is not matched so we don't show this error with some invalid string prefixes like: kf"dsfsdf"
|
||||
# Soft keywords need to also be ignored because they can be parsed as NAME NAME
|
||||
| !(NAME STRING | SOFT_KEYWORD) a=disjunction b=expression_without_invalid {
|
||||
|
|
|
@ -2303,7 +2303,7 @@ class SyntaxErrorTests(unittest.TestCase):
|
|||
)
|
||||
err = run_script(source.encode('cp437'))
|
||||
self.assertEqual(err[-3], ' "¢¢¢¢¢¢" + f(4, x for x in range(1))')
|
||||
self.assertEqual(err[-2], ' ^^^^^^^^^^^^^^^^^^^')
|
||||
self.assertEqual(err[-2], ' ^^^')
|
||||
|
||||
# Check backwards tokenizer errors
|
||||
source = '# -*- coding: ascii -*-\n\n(\n'
|
||||
|
|
|
@ -312,6 +312,12 @@ SyntaxError: did you forget parentheses around the comprehension target?
|
|||
Traceback (most recent call last):
|
||||
SyntaxError: did you forget parentheses around the comprehension target?
|
||||
|
||||
# Incorrectly closed strings
|
||||
|
||||
>>> "The interesting object "The important object" is very important"
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: invalid syntax. Is this intended to be part of the string?
|
||||
|
||||
# Missing commas in literals collections should not
|
||||
# produce special error messages regarding missing
|
||||
# parentheses, but about missing commas instead
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Improve syntax errors for incorrectly closed strings. Patch by Pablo Galindo
|
2003
Parser/parser.c
generated
2003
Parser/parser.c
generated
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue