From 1456058ecd7cc6f53acdd60140173d5cf40df7f1 Mon Sep 17 00:00:00 2001 From: Patcher Date: Thu, 21 Aug 2025 11:39:59 +0000 Subject: [PATCH 1/2] [fix] Fix crash when inferring namedtuple with invalid field name --- ChangeLog | 4 ++++ astroid/exceptions.py | 5 ++++- tests/test_regrtest.py | 11 +++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index b49d64746b..b98d60e318 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,6 +7,10 @@ What's New in astroid 4.0.0? ============================ Release date: TBA +* Fix crash when inferring namedtuple with invalid field name + + Closes #2519 + * Fix false positive no-member in except * handler. Closes pylint-dev/pylint#9056 diff --git a/astroid/exceptions.py b/astroid/exceptions.py index 126acb954d..e523b70c35 100644 --- a/astroid/exceptions.py +++ b/astroid/exceptions.py @@ -64,7 +64,10 @@ def __init__(self, message: str = "", **kws: Any) -> None: setattr(self, key, value) def __str__(self) -> str: - return self.message.format(**vars(self)) + try: + return self.message.format(**vars(self)) + except ValueError: + return self.message # Return raw message if formatting fails class AstroidBuildingError(AstroidError): diff --git a/tests/test_regrtest.py b/tests/test_regrtest.py index 9fcc378dc6..1b16662c68 100644 --- a/tests/test_regrtest.py +++ b/tests/test_regrtest.py @@ -550,3 +550,14 @@ def test_regression_infer_dict_literal_comparison_uninferable() -> None: node = extract_node("{{}}>0") inferred = next(node.infer()) assert inferred.value == Uninferable + + +def test_regression_infer_namedtuple_invalid_fieldname_error() -> None: + """Regression test for issue #2519.""" + code = """ + from collections import namedtuple + namedtuple('a','}') + """ + node = extract_node(code) + inferred = next(node.infer()) + assert inferred.value == Uninferable From 91fe49f262a91044ff84cef81d64030f1b75ef18 Mon Sep 17 00:00:00 2001 From: Synrom <30272537+Synrom@users.noreply.github.com> Date: Thu, 21 Aug 2025 16:42:30 +0200 Subject: [PATCH 2/2] Update ChangeLog Co-authored-by: Pierre Sassoulas --- ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index b98d60e318..47bb4d19b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,7 +7,7 @@ What's New in astroid 4.0.0? ============================ Release date: TBA -* Fix crash when inferring namedtuple with invalid field name +* Fix crash when inferring namedtuple with invalid field name looking like f-string formatting. Closes #2519