mirror of
https://github.com/AdaCore/cpython.git
synced 2026-02-12 12:57:15 -08:00
bpo-41887: omit leading spaces/tabs on ast.literal_eval (#22469)
Also document that eval() does this (the same way).
This commit is contained in:
@@ -1586,6 +1586,9 @@ and classes for traversing abstract syntax trees:
|
||||
.. versionchanged:: 3.9
|
||||
Now supports creating empty sets with ``'set()'``.
|
||||
|
||||
.. versionchanged:: 3.10
|
||||
For string inputs, leading spaces and tabs are now stripped.
|
||||
|
||||
|
||||
.. function:: get_docstring(node, clean=True)
|
||||
|
||||
@@ -1820,4 +1823,4 @@ to stdout. Otherwise, the content is read from stdin.
|
||||
`Parso <https://parso.readthedocs.io>`_ is a Python parser that supports
|
||||
error recovery and round-trip parsing for different Python versions (in
|
||||
multiple Python versions). Parso is also able to list multiple syntax errors
|
||||
in your python file.
|
||||
in your python file.
|
||||
|
||||
@@ -506,6 +506,9 @@ are always available. They are listed here in alphabetical order.
|
||||
returns the current global and local dictionary, respectively, which may be
|
||||
useful to pass around for use by :func:`eval` or :func:`exec`.
|
||||
|
||||
If the given source is a string, then leading and trailing spaces and tabs
|
||||
are stripped.
|
||||
|
||||
See :func:`ast.literal_eval` for a function that can safely evaluate strings
|
||||
with expressions containing only literals.
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ def literal_eval(node_or_string):
|
||||
sets, booleans, and None.
|
||||
"""
|
||||
if isinstance(node_or_string, str):
|
||||
node_or_string = parse(node_or_string, mode='eval')
|
||||
node_or_string = parse(node_or_string.lstrip(" \t"), mode='eval')
|
||||
if isinstance(node_or_string, Expression):
|
||||
node_or_string = node_or_string.body
|
||||
def _raise_malformed_node(node):
|
||||
|
||||
@@ -1005,6 +1005,12 @@ Module(
|
||||
malformed = ast.Dict(keys=[ast.Constant(1)], values=[ast.Constant(2), ast.Constant(3)])
|
||||
self.assertRaises(ValueError, ast.literal_eval, malformed)
|
||||
|
||||
def test_literal_eval_trailing_ws(self):
|
||||
self.assertEqual(ast.literal_eval(" -1"), -1)
|
||||
self.assertEqual(ast.literal_eval("\t\t-1"), -1)
|
||||
self.assertEqual(ast.literal_eval(" \t -1"), -1)
|
||||
self.assertRaises(IndentationError, ast.literal_eval, "\n -1")
|
||||
|
||||
def test_bad_integer(self):
|
||||
# issue13436: Bad error message with invalid numeric values
|
||||
body = [ast.ImportFrom(module='time',
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
Strip leading spaces and tabs on :func:`ast.literal_eval`. Also document
|
||||
stripping of spaces and tabs for :func:`eval`.
|
||||
Reference in New Issue
Block a user