From 65b6d5d7407636f2e434670c1cb332e0117dd22c Mon Sep 17 00:00:00 2001 From: Nick Drozd Date: Sun, 22 Sep 2024 09:00:09 -0400 Subject: [PATCH] Check for empty format specs (#2574) (cherry picked from commit a679550d3dc87edaa35b334771527cba5102a373) --- ChangeLog | 5 +++++ astroid/nodes/node_classes.py | 3 +++ tests/test_inference.py | 8 ++++++++ 3 files changed, 16 insertions(+) diff --git a/ChangeLog b/ChangeLog index 1ad303a154..a53ed9e417 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15,6 +15,11 @@ Release date: TBA +* Fix a crash from inferring empty format specs. + + Closes pylint-dev/pylint#9945 + + What's New in astroid 3.3.3? ============================ Release date: 2024-09-20 diff --git a/astroid/nodes/node_classes.py b/astroid/nodes/node_classes.py index 1924c78eba..c326abbb3e 100644 --- a/astroid/nodes/node_classes.py +++ b/astroid/nodes/node_classes.py @@ -4779,6 +4779,9 @@ def _infer( def _infer_from_values( cls, nodes: list[NodeNG], context: InferenceContext | None = None, **kwargs: Any ) -> Generator[InferenceResult, None, InferenceErrorInfo | None]: + if not nodes: + yield + return if len(nodes) == 1: yield from nodes[0]._infer(context, **kwargs) return diff --git a/tests/test_inference.py b/tests/test_inference.py index 185ee0f650..daa5613565 100644 --- a/tests/test_inference.py +++ b/tests/test_inference.py @@ -7380,3 +7380,11 @@ def test_sys_argv_uninferable() -> None: sys_argv_value = list(a._infer()) assert len(sys_argv_value) == 1 assert sys_argv_value[0] is Uninferable + + +def test_empty_format_spec() -> None: + """Regression test for https://github.com/pylint-dev/pylint/issues/9945.""" + node = extract_node('f"{x:}"') + assert isinstance(node, nodes.JoinedStr) + + assert list(node.infer()) == [util.Uninferable]