Skip to content

Commit 98b5e41

Browse files
Treat generator and comprehension more gracefully
1 parent da1fb3b commit 98b5e41

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

pylint/checkers/refactoring/len_checker.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from typing import List, Optional
66

77
import astroid
8+
from astroid import DictComp, GeneratorExp, ListComp, SetComp, Uninferable
89

910
from pylint import checkers, interfaces
1011
from pylint.checkers import utils
@@ -88,13 +89,13 @@ def visit_call(self, node):
8889
# we're finally out of any nested boolean operations so check if
8990
# this len() call is part of a test condition
9091
if _is_test_condition(node, parent):
91-
try:
92-
instance = next(node.args[0].infer())
93-
except astroid.InferenceError:
94-
# Inference error happens for list comprehension, dict comprehension,
95-
# set comprehension and generators (like range)
92+
len_arg = node.args[0]
93+
generator_or_comprehension = (ListComp, SetComp, DictComp, GeneratorExp)
94+
if isinstance(len_arg, generator_or_comprehension):
95+
# The node is a generator or comprehension as in len([x for x in ...])
9696
self.add_message("len-as-condition", node=node)
9797
return
98+
instance = next(len_arg.infer())
9899
mother_classes = self.base_classes_of_node(instance)
99100
affected_by_pep8 = any(
100101
t in mother_classes for t in ["str", "tuple", "list", "set"]

0 commit comments

Comments
 (0)