AttributeError:“bool”对象在 Python 中没有属性“X”

AttributeError: ‘bool’ 对象在 Python 中没有属性 ‘X’

AttributeError: ‘bool’ object has no attribute ‘X’ in Python

TruePython“AttributeError: ‘bool’ object has no attribute”在我们尝试访问布尔值(或False上的属性时发生。

要解决该错误,请跟踪您将值设置为布尔值的位置,或使用该hasattr()方法检查属性是否存在。

attributeerror bool 对象没有属性

下面是错误如何发生的示例。

主程序
example = True # ⛔️ AttributeError: 'bool' object has no attribute 'my_attribute' print(example.my_attribute)

我们正在尝试访问布尔值(TrueFalse)而不是对象上的属性。

如果你打印()你正在访问属性的值,它将是一个布尔值。

追踪变量被分配布尔值的位置

要解决该错误,您需要查明在代码中将值设置为布尔值的确切位置并更正分配。

例如,您可能从代码中某处的函数返回一个布尔值,并将其分配给变量而不是对象。

主程序
def get_obj(): return False # 👇️ False example = get_obj() # ⛔️ AttributeError: 'bool' object has no attribute 'items' print(example.items())

get_obj示例中的函数返回一个布尔值,因此变量example
被分配了一个
False导致错误的值。

当您比较值时,您会得到一个布尔值结果。

主程序
result = 10 == 15 print(result) # 👉️ False result = len('bobbyhadz.com') > 5 print(result) # 👉️ True

尝试访问 aTrueFalse值上的属性会导致错误。

错误地重新分配代码中的变量

确保您没有错误地将变量重新分配给布尔值(True或)。False

主程序
a_str = 'bobbyhadz.com' # 👇️ reassigning variable to boolean a_str = True # ⛔️ AttributeError: 'bool' object has no attribute result = a_str.upper()

我们最初声明了该变量并将其设置为一个字符串,但后来它被分配了一个导致错误的布尔值。

在访问之前检查对象是否包含该属性

如果需要检查对象是否包含属性,请使用该hasattr
函数。

主程序
example = True if hasattr(example, 'my_attribute'): print(example.my_attribute) else: print('Attribute is not present on object') # 👉️ this runs

hasattr函数

采用以下 2 个参数:

姓名 描述
object 我们要测试属性是否存在的对象
name 对象中要检查的属性的名称

如果字符串是对象属性之一的名称,则函数hasattr()返回,否则返回。TrueFalse

hasattr如果对象上不存在该属性,则使用该函数将处理错误,但是,您仍然必须弄清楚代码中变量在何处被分配了布尔值。

主程序
class Employee(): def __init__(self, name): self.name = name employee = Employee('Bobby Hadz') # 👇️ assignment to boolean here (cause of the error) employee = True # ⛔️ AttributeError: 'bool' object has no attribute 'name' print(employee.name)

employee该示例显示了变量最初如何存储一个对象,但在我们的代码中某处被分配了一个布尔值,这导致了错误。

employee如果我们删除示例中分配布尔值的行,则不会发生错误。

主程序
class Employee(): def __init__(self, name): self.name = name employee = Employee('Bobby Hadz') print(employee.name) # 👉️ Bobby Hadz

如果您print()访问属性的值并返回True
or
False值,则您要么将不正确的值分配给变量,要么在代码中的某处进行重新分配,用布尔值覆盖对象。