diff options
| -rw-r--r-- | ChangeLog | 4 | ||||
| -rw-r--r-- | astroid/brain/brain_builtin_inference.py | 2 | ||||
| -rw-r--r-- | tests/unittest_inference.py | 14 |
3 files changed, 20 insertions, 0 deletions
@@ -15,6 +15,10 @@ Release Date: TBA Closes #703 +* Fix a crash in inference caused by `Uninferable` container elements + + Close #866 + * Add `python 3.9` support. * The flat attribute of ``numpy.ndarray`` is now inferred as an ``numpy.ndarray`` itself. diff --git a/astroid/brain/brain_builtin_inference.py b/astroid/brain/brain_builtin_inference.py index 0d76ef88..b1f811d4 100644 --- a/astroid/brain/brain_builtin_inference.py +++ b/astroid/brain/brain_builtin_inference.py @@ -224,6 +224,8 @@ def _container_generic_transform(arg, context, klass, iterables, build_elts): # TODO: Does not handle deduplication for sets. elts = [] for element in arg.elts: + if not element: + continue inferred = helpers.safe_infer(element, context=context) if inferred: evaluated_object = nodes.EvaluatedObject( diff --git a/tests/unittest_inference.py b/tests/unittest_inference.py index e9e32fd6..cfc05791 100644 --- a/tests/unittest_inference.py +++ b/tests/unittest_inference.py @@ -5884,5 +5884,19 @@ def test_infer_generated_setter(): assert list(inferred.nodes_of_class(nodes.Const)) == [] +def test_infer_list_of_uninferables_does_not_crash(): + code = """ + x = [A] * 1 + f = [x, [A] * 2] + x = list(f) + [] # List[Uninferable] + tuple(x[0]) + """ + node = extract_node(code) + inferred = next(node.infer()) + assert isinstance(inferred, nodes.Tuple) + # Would not be able to infer the first element. + assert not inferred.elts + + if __name__ == "__main__": unittest.main() |
