AttributeError: ‘float’ 对象没有属性 ‘X’ (Python)
AttributeError: ‘float’ object has no attribute ‘X’ (Python)
当我们尝试访问浮点数上不存在的属性(例如 )时,Python 会出现“AttributeError: ‘float’ object has no attribute”
5.4
。
要解决该错误,请在访问属性之前确保该值属于预期类型。
对浮点数调用 split()
下面是错误如何发生的示例。
example = 5.4 print(type(example)) # 👉️ <class 'float'> # ⛔️ AttributeError: 'float' object has no attribute 'split' result = example.split('.') print(result)
我们尝试
对浮点数调用 split() 方法
并得到错误。
如果您print()正在访问属性的值,它将是一个浮点数。
为了解决示例中的错误,我们必须将浮点数转换为字符串,以便能够访问字符串特定的split()
方法。
example = 5.4 result = str(example).split('.') print(result) # 👉️ ['5', '4']
在浮点数上调用 round()
错误的另一个常见原因是调用round()
浮点上的方法。
example = 3.6 # ⛔️ AttributeError: 'float' object has no attribute 'round' result = example.round()
为了解决这个错误,我们必须将浮点数作为参数传递给函数round()
,而不是在浮点数上调用函数。
example = 5.4 result = round(example) print(result) # 👉️ 5
我们必须将浮点数作为参数传递给round()
函数,而
不是访问浮点数上的函数。example.round()
round()
round函数采用以下 2 个参数:
姓名 | 描述 |
---|---|
number |
ndigits 要舍入到小数点后精度的数字 |
ndigits |
运算后数字应具有的小数点后位数(可选) |
该函数返回四舍五入到小数点后精度的round
数字。ndigits
如果ndigits
省略,该函数返回最接近的整数。
round()
,而不是访问浮点数上的函数,例如。my_float.round()
round()
round(3.5)
检查对象是否包含属性
如果需要检查对象是否包含属性,请使用该hasattr
函数。
example = 5.4 if hasattr(example, 'round'): print(example.round) else: print('Attribute is not present on object') # 👉️ this runs
hasattr函数
采用以下 2 个参数:
姓名 | 描述 |
---|---|
object |
我们要测试属性是否存在的对象 |
name |
要在对象中检查的属性的名称 |
如果字符串是对象属性之一的名称,则该hasattr()
函数返回,否则返回。True
False
hasattr
如果对象上不存在该属性,则使用该函数可以处理错误,但是,您仍然必须弄清楚代码中变量在何处被分配了浮点值。找出变量在哪里被分配了浮点数
开始调试的一个好方法是print(dir(your_object))
查看对象具有哪些属性。
这是打印 a 的属性的示例float
。
example = 5.4 # [..., 'as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real', ...] print(dir(example))
如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。
如果您尝试访问不在此列表中的任何属性,您将收到错误。
要解决该错误,请在访问属性之前将值转换为正确的类型,或者在访问任何属性之前更正分配给变量的值的类型。