@@ -209,10 +209,10 @@ def _container_generic_inference(node, context, node_type, transform):
209209 inferred = next (arg .infer (context = context ))
210210 except (InferenceError , StopIteration ) as exc :
211211 raise UseInferenceDefault from exc
212- if inferred is util .Uninferable :
212+ if isinstance ( inferred , util .UninferableBase ) :
213213 raise UseInferenceDefault
214214 transformed = transform (inferred )
215- if not transformed or transformed is util .Uninferable :
215+ if not transformed or isinstance ( transformed , util .UninferableBase ) :
216216 raise UseInferenceDefault
217217 return transformed
218218
@@ -423,7 +423,9 @@ def infer_super(node, context: InferenceContext | None = None):
423423 except (InferenceError , StopIteration ) as exc :
424424 raise UseInferenceDefault from exc
425425
426- if mro_pointer is util .Uninferable or mro_type is util .Uninferable :
426+ if isinstance (mro_pointer , util .UninferableBase ) or isinstance (
427+ mro_type , util .UninferableBase
428+ ):
427429 # No way we could understand this.
428430 raise UseInferenceDefault
429431
@@ -445,7 +447,7 @@ def _infer_getattr_args(node, context):
445447 except (InferenceError , StopIteration ) as exc :
446448 raise UseInferenceDefault from exc
447449
448- if obj is util .Uninferable or attr is util .Uninferable :
450+ if isinstance ( obj , util .UninferableBase ) or isinstance ( attr , util .UninferableBase ) :
449451 # If one of the arguments is something we can't infer,
450452 # then also make the result of the getattr call something
451453 # which is unknown.
@@ -467,8 +469,8 @@ def infer_getattr(node, context: InferenceContext | None = None):
467469 """
468470 obj , attr = _infer_getattr_args (node , context )
469471 if (
470- obj is util .Uninferable
471- or attr is util .Uninferable
472+ isinstance ( obj , util .UninferableBase )
473+ or isinstance ( attr , util .UninferableBase )
472474 or not hasattr (obj , "igetattr" )
473475 ):
474476 return util .Uninferable
@@ -498,8 +500,8 @@ def infer_hasattr(node, context: InferenceContext | None = None):
498500 try :
499501 obj , attr = _infer_getattr_args (node , context )
500502 if (
501- obj is util .Uninferable
502- or attr is util .Uninferable
503+ isinstance ( obj , util .UninferableBase )
504+ or isinstance ( attr , util .UninferableBase )
503505 or not hasattr (obj , "getattr" )
504506 ):
505507 return util .Uninferable
@@ -530,7 +532,7 @@ def infer_callable(node, context: InferenceContext | None = None):
530532 inferred = next (argument .infer (context = context ))
531533 except (InferenceError , StopIteration ):
532534 return util .Uninferable
533- if inferred is util .Uninferable :
535+ if isinstance ( inferred , util .UninferableBase ) :
534536 return util .Uninferable
535537 return nodes .Const (inferred .callable ())
536538
@@ -585,11 +587,11 @@ def infer_bool(node, context: InferenceContext | None = None):
585587 inferred = next (argument .infer (context = context ))
586588 except (InferenceError , StopIteration ):
587589 return util .Uninferable
588- if inferred is util .Uninferable :
590+ if isinstance ( inferred , util .UninferableBase ) :
589591 return util .Uninferable
590592
591593 bool_value = inferred .bool_value (context = context )
592- if bool_value is util .Uninferable :
594+ if isinstance ( bool_value , util .UninferableBase ) :
593595 return util .Uninferable
594596 return nodes .Const (bool_value )
595597
@@ -611,7 +613,7 @@ def infer_slice(node, context: InferenceContext | None = None):
611613 infer_func = partial (helpers .safe_infer , context = context )
612614 args = [infer_func (arg ) for arg in args ]
613615 for arg in args :
614- if not arg or arg is util .Uninferable :
616+ if not arg or isinstance ( arg , util .UninferableBase ) :
615617 raise UseInferenceDefault
616618 if not isinstance (arg , nodes .Const ):
617619 raise UseInferenceDefault
@@ -725,7 +727,7 @@ def infer_isinstance(callnode, context: InferenceContext | None = None):
725727 raise UseInferenceDefault ("TypeError: " + str (exc )) from exc
726728 except MroError as exc :
727729 raise UseInferenceDefault from exc
728- if isinstance_bool is util .Uninferable :
730+ if isinstance ( isinstance_bool , util .UninferableBase ) :
729731 raise UseInferenceDefault
730732 return nodes .Const (isinstance_bool )
731733
@@ -811,7 +813,7 @@ def infer_int(node, context: InferenceContext | None = None):
811813 except (InferenceError , StopIteration ) as exc :
812814 raise UseInferenceDefault (str (exc )) from exc
813815
814- if first_value is util .Uninferable :
816+ if isinstance ( first_value , util .UninferableBase ) :
815817 raise UseInferenceDefault
816818
817819 if isinstance (first_value , nodes .Const ) and isinstance (
@@ -924,7 +926,7 @@ def _is_str_format_call(node: nodes.Call) -> bool:
924926
925927def _infer_str_format_call (
926928 node : nodes .Call , context : InferenceContext | None = None
927- ) -> Iterator [nodes .Const | type [ util .Uninferable ] ]:
929+ ) -> Iterator [nodes .Const | util .UninferableBase ]:
928930 """Return a Const node based on the template and passed arguments."""
929931 call = arguments .CallSite .from_call (node , context = context )
930932 if isinstance (node .func .expr , nodes .Name ):
0 commit comments