Handle Uninferable when calling bool_value
diff --git a/astroid/brain/brain_dataclasses.py b/astroid/brain/brain_dataclasses.py
index e6794be..58ae82f 100644
--- a/astroid/brain/brain_dataclasses.py
+++ b/astroid/brain/brain_dataclasses.py
@@ -80,7 +80,7 @@
break
for keyword in decorator.keywords:
if keyword.arg == "kw_only":
- kw_only_decorated = keyword.value.bool_value()
+ kw_only_decorated = keyword.value.bool_value() is True
init_str = _generate_dataclass_init(
node,
@@ -156,7 +156,7 @@
# Check for keyword arguments of the form init=False
return not any(
keyword.arg == "init"
- and not keyword.value.bool_value() # type: ignore[union-attr] # value is never None
+ and keyword.value.bool_value() is False # type: ignore[union-attr] # value is never None
for keyword in found.keywords
)
@@ -272,7 +272,7 @@
if is_field:
# Skip any fields that have `init=False`
if any(
- keyword.arg == "init" and not keyword.value.bool_value()
+ keyword.arg == "init" and (keyword.value.bool_value() is False)
for keyword in value.keywords # type: ignore[union-attr] # value is never None
):
# Also remove the name from the previous arguments to be inserted later
@@ -342,7 +342,7 @@
if is_field:
kw_only = [k for k in value.keywords if k.arg == "kw_only"] # type: ignore[union-attr]
if kw_only:
- if kw_only[0].value.bool_value():
+ if kw_only[0].value.bool_value() is True:
kw_only_params.append(param_str)
else:
params.append(param_str)
diff --git a/astroid/brain/brain_namedtuple_enum.py b/astroid/brain/brain_namedtuple_enum.py
index 2cbb170..7163e86 100644
--- a/astroid/brain/brain_namedtuple_enum.py
+++ b/astroid/brain/brain_namedtuple_enum.py
@@ -204,9 +204,10 @@
)
assert isinstance(func, nodes.NodeNG)
try:
- rename = next(
+ rename_arg_bool_value = next(
call_site.infer_argument(func, "rename", context or InferenceContext())
).bool_value()
+ rename = rename_arg_bool_value is True
except (InferenceError, StopIteration):
rename = False
diff --git a/astroid/nodes/node_classes.py b/astroid/nodes/node_classes.py
index a45b5e3..0d3a425 100644
--- a/astroid/nodes/node_classes.py
+++ b/astroid/nodes/node_classes.py
@@ -3121,8 +3121,11 @@
except (InferenceError, StopIteration):
both_branches = True
else:
- if not isinstance(test, util.UninferableBase):
- if test.bool_value():
+ test_bool_value = test.bool_value()
+ if not isinstance(test, util.UninferableBase) and not isinstance(
+ test_bool_value, util.UninferableBase
+ ):
+ if test_bool_value:
yield from self.body.infer(context=lhs_context)
else:
yield from self.orelse.infer(context=rhs_context)