AttributeError: ‘bool’ 对象在 Python 中没有属性 ‘X’
AttributeError: ‘bool’ object has no attribute ‘X’ in Python
True
Python“AttributeError: ‘bool’ object has no attribute”在我们尝试访问布尔值(或False
)上的属性时发生。
要解决该错误,请跟踪您将值设置为布尔值的位置,或使用该hasattr()
方法检查属性是否存在。
下面是错误如何发生的示例。
example = True # ⛔️ AttributeError: 'bool' object has no attribute 'my_attribute' print(example.my_attribute)
我们正在尝试访问布尔值(True
或False
)而不是对象上的属性。
如果你打印()你正在访问属性的值,它将是一个布尔值。
追踪变量被分配布尔值的位置
要解决该错误,您需要查明在代码中将值设置为布尔值的确切位置并更正分配。
例如,您可能从代码中某处的函数返回一个布尔值,并将其分配给变量而不是对象。
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
尝试访问 aTrue
或False
值上的属性会导致错误。
错误地重新分配代码中的变量
确保您没有错误地将变量重新分配给布尔值(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()
返回,否则返回。True
False
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
orFalse
值,则您要么将不正确的值分配给变量,要么在代码中的某处进行重新分配,用布尔值覆盖对象。