@@ -329,7 +329,7 @@ def is_iterable(n):
329329
330330    try :
331331        inferred  =  next (arg .infer (context ))
332-     except  (InferenceError , NameInferenceError ) as  exc :
332+     except  (InferenceError , NameInferenceError ,  StopIteration ) as  exc :
333333        raise  UseInferenceDefault  from  exc 
334334    if  isinstance (inferred , nodes .Dict ):
335335        items  =  inferred .items 
@@ -432,11 +432,11 @@ def infer_super(node, context=None):
432432    else :
433433        try :
434434            mro_pointer  =  next (node .args [0 ].infer (context = context ))
435-         except  InferenceError  as  exc :
435+         except  ( InferenceError ,  StopIteration )  as  exc :
436436            raise  UseInferenceDefault  from  exc 
437437        try :
438438            mro_type  =  next (node .args [1 ].infer (context = context ))
439-         except  InferenceError  as  exc :
439+         except  ( InferenceError ,  StopIteration )  as  exc :
440440            raise  UseInferenceDefault  from  exc 
441441
442442    if  mro_pointer  is  util .Uninferable  or  mro_type  is  util .Uninferable :
@@ -458,7 +458,7 @@ def _infer_getattr_args(node, context):
458458    try :
459459        obj  =  next (node .args [0 ].infer (context = context ))
460460        attr  =  next (node .args [1 ].infer (context = context ))
461-     except  InferenceError  as  exc :
461+     except  ( InferenceError ,  StopIteration )  as  exc :
462462        raise  UseInferenceDefault  from  exc 
463463
464464    if  obj  is  util .Uninferable  or  attr  is  util .Uninferable :
@@ -496,7 +496,7 @@ def infer_getattr(node, context=None):
496496            # Try to infer the default and return it instead. 
497497            try :
498498                return  next (node .args [2 ].infer (context = context ))
499-             except  InferenceError  as  exc :
499+             except  ( StopIteration ,  InferenceError )  as  exc :
500500                raise  UseInferenceDefault  from  exc 
501501
502502    raise  UseInferenceDefault 
@@ -544,7 +544,7 @@ def infer_callable(node, context=None):
544544    argument  =  node .args [0 ]
545545    try :
546546        inferred  =  next (argument .infer (context = context ))
547-     except  InferenceError :
547+     except  ( InferenceError ,  StopIteration ) :
548548        return  util .Uninferable 
549549    if  inferred  is  util .Uninferable :
550550        return  util .Uninferable 
@@ -564,7 +564,7 @@ def infer_property(node, context=None):
564564    getter  =  node .args [0 ]
565565    try :
566566        inferred  =  next (getter .infer (context = context ))
567-     except  InferenceError  as  exc :
567+     except  ( InferenceError ,  StopIteration )  as  exc :
568568        raise  UseInferenceDefault  from  exc 
569569
570570    if  not  isinstance (inferred , (nodes .FunctionDef , nodes .Lambda )):
@@ -592,7 +592,7 @@ def infer_bool(node, context=None):
592592    argument  =  node .args [0 ]
593593    try :
594594        inferred  =  next (argument .infer (context = context ))
595-     except  InferenceError :
595+     except  ( InferenceError ,  StopIteration ) :
596596        return  util .Uninferable 
597597    if  inferred  is  util .Uninferable :
598598        return  util .Uninferable 
@@ -682,7 +682,7 @@ def infer_issubclass(callnode, context=None):
682682
683683    try :
684684        obj_type  =  next (obj_node .infer (context = context ))
685-     except  InferenceError  as  exc :
685+     except  ( InferenceError ,  StopIteration )  as  exc :
686686        raise  UseInferenceDefault  from  exc 
687687    if  not  isinstance (obj_type , nodes .ClassDef ):
688688        raise  UseInferenceDefault ("TypeError: arg 1 must be class" )
@@ -749,13 +749,19 @@ def _class_or_tuple_to_container(node, context=None):
749749    # Move inferences results into container 
750750    # to simplify later logic 
751751    # 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 
753756    # arg2 MUST be a type or a TUPLE of types 
754757    # for isinstance 
755758    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 
759765        class_container  =  [
760766            klass_node  for  klass_node  in  class_container  if  klass_node  is  not None 
761767        ]
@@ -865,7 +871,7 @@ def _build_dict_with_elements(elements):
865871    values  =  call .positional_arguments [0 ]
866872    try :
867873        inferred_values  =  next (values .infer (context = context ))
868-     except  InferenceError :
874+     except  ( InferenceError ,  StopIteration ) :
869875        return  _build_dict_with_elements ([])
870876    if  inferred_values  is  util .Uninferable :
871877        return  _build_dict_with_elements ([])
0 commit comments