AttributeError:“float”对象没有属性“X”(Python)

AttributeError: ‘float’ 对象没有属性 ‘X’ (Python)

AttributeError: ‘float’ object has no attribute ‘X’ (Python)

当我们尝试访问浮点数上不存在的属性(例如 )时,Python 会出现“AttributeError: ‘float’ object has no attribute”
5.4

要解决该错误,请在访问属性之前确保该值属于预期类型。

attributeerror 浮动对象没有属性

对浮点数调用 split()

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

主程序
example = 5.4 print(type(example)) # 👉️ <class 'float'> # ⛔️ AttributeError: 'float' object has no attribute 'split' result = example.split('.') print(result)

我们尝试
对浮点数调用 split() 方法
并得到错误。

如果您p​​rint()正在访问属性的值,它将是一个浮点数。

要解决该错误,您需要找出代码中将值设置为浮点数的确切位置并更正分配。

为了解决示例中的错误,我们必须将浮点数转换为字符串,以便能够访问字符串特定的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()

attributeerror float 对象没有属性 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()函数返回,否则返回。TrueFalse

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

找出变量在哪里被分配了浮点数

开始调试的一个好方法是print(dir(your_object))查看对象具有哪些属性。

这是打印 a 的属性的示例float

主程序
example = 5.4 # [..., 'as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real', ...] print(dir(example))

如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。

如果您尝试访问不在此列表中的任何属性,您将收到错误。

要解决该错误,请在访问属性之前将值转换为正确的类型,或者在访问任何属性之前更正分配给变量的值的类型。