@@ -329,7 +329,7 @@ def is_iterable(n):
329
329
330
330
try :
331
331
inferred = next (arg .infer (context ))
332
- except (InferenceError , NameInferenceError ) as exc :
332
+ except (InferenceError , NameInferenceError , StopIteration ) as exc :
333
333
raise UseInferenceDefault from exc
334
334
if isinstance (inferred , nodes .Dict ):
335
335
items = inferred .items
@@ -432,11 +432,11 @@ def infer_super(node, context=None):
432
432
else :
433
433
try :
434
434
mro_pointer = next (node .args [0 ].infer (context = context ))
435
- except InferenceError as exc :
435
+ except ( InferenceError , StopIteration ) as exc :
436
436
raise UseInferenceDefault from exc
437
437
try :
438
438
mro_type = next (node .args [1 ].infer (context = context ))
439
- except InferenceError as exc :
439
+ except ( InferenceError , StopIteration ) as exc :
440
440
raise UseInferenceDefault from exc
441
441
442
442
if mro_pointer is util .Uninferable or mro_type is util .Uninferable :
@@ -458,7 +458,7 @@ def _infer_getattr_args(node, context):
458
458
try :
459
459
obj = next (node .args [0 ].infer (context = context ))
460
460
attr = next (node .args [1 ].infer (context = context ))
461
- except InferenceError as exc :
461
+ except ( InferenceError , StopIteration ) as exc :
462
462
raise UseInferenceDefault from exc
463
463
464
464
if obj is util .Uninferable or attr is util .Uninferable :
@@ -496,7 +496,7 @@ def infer_getattr(node, context=None):
496
496
# Try to infer the default and return it instead.
497
497
try :
498
498
return next (node .args [2 ].infer (context = context ))
499
- except InferenceError as exc :
499
+ except ( StopIteration , InferenceError ) as exc :
500
500
raise UseInferenceDefault from exc
501
501
502
502
raise UseInferenceDefault
@@ -544,7 +544,7 @@ def infer_callable(node, context=None):
544
544
argument = node .args [0 ]
545
545
try :
546
546
inferred = next (argument .infer (context = context ))
547
- except InferenceError :
547
+ except ( InferenceError , StopIteration ) :
548
548
return util .Uninferable
549
549
if inferred is util .Uninferable :
550
550
return util .Uninferable
@@ -564,7 +564,7 @@ def infer_property(node, context=None):
564
564
getter = node .args [0 ]
565
565
try :
566
566
inferred = next (getter .infer (context = context ))
567
- except InferenceError as exc :
567
+ except ( InferenceError , StopIteration ) as exc :
568
568
raise UseInferenceDefault from exc
569
569
570
570
if not isinstance (inferred , (nodes .FunctionDef , nodes .Lambda )):
@@ -592,7 +592,7 @@ def infer_bool(node, context=None):
592
592
argument = node .args [0 ]
593
593
try :
594
594
inferred = next (argument .infer (context = context ))
595
- except InferenceError :
595
+ except ( InferenceError , StopIteration ) :
596
596
return util .Uninferable
597
597
if inferred is util .Uninferable :
598
598
return util .Uninferable
@@ -682,7 +682,7 @@ def infer_issubclass(callnode, context=None):
682
682
683
683
try :
684
684
obj_type = next (obj_node .infer (context = context ))
685
- except InferenceError as exc :
685
+ except ( InferenceError , StopIteration ) as exc :
686
686
raise UseInferenceDefault from exc
687
687
if not isinstance (obj_type , nodes .ClassDef ):
688
688
raise UseInferenceDefault ("TypeError: arg 1 must be class" )
@@ -749,13 +749,19 @@ def _class_or_tuple_to_container(node, context=None):
749
749
# Move inferences results into container
750
750
# to simplify later logic
751
751
# raises InferenceError if any of the inferences fall through
752
- node_infer = next (node .infer (context = context ))
752
+ try :
753
+ node_infer = next (node .infer (context = context ))
754
+ except StopIteration as e :
755
+ raise InferenceError (node = node , context = context ) from e
753
756
# arg2 MUST be a type or a TUPLE of types
754
757
# for isinstance
755
758
if isinstance (node_infer , nodes .Tuple ):
756
- class_container = [
757
- next (node .infer (context = context )) for node in node_infer .elts
758
- ]
759
+ try :
760
+ class_container = [
761
+ next (node .infer (context = context )) for node in node_infer .elts
762
+ ]
763
+ except StopIteration as e :
764
+ raise InferenceError (node = node , context = context ) from e
759
765
class_container = [
760
766
klass_node for klass_node in class_container if klass_node is not None
761
767
]
@@ -865,7 +871,7 @@ def _build_dict_with_elements(elements):
865
871
values = call .positional_arguments [0 ]
866
872
try :
867
873
inferred_values = next (values .infer (context = context ))
868
- except InferenceError :
874
+ except ( InferenceError , StopIteration ) :
869
875
return _build_dict_with_elements ([])
870
876
if inferred_values is util .Uninferable :
871
877
return _build_dict_with_elements ([])
0 commit comments