Wed Apr 20 2022·2 min read
Photo by Atika Dhaib
The Python "AttributeError: 'float' object has no attribute" occurs when we
try to access an attribute that doesn't exist on a floating-point number, e.g.
5.4. To solve the error, make sure the value is of the expected type before
accessing the attribute.
Here is an example of how the error occurs.
example = 5.4 print(type(example)) # 👉️ <class 'float'> # ⛔️ AttributeError: 'float' object has no attribute 'split' result = example.split('.') print(result)
We tried to call the
split() method on a float object and got the error.
print() the value you are accessing the attribute on, it will be a
To solve the error in the example, we would have to convert the floating-point
number to a string to be able to access the string-specific
example = 5.4 result = str(example).split('.') print(result) # 👉️ ['5', '4']
If you are trying to use the
round() function, you have to pass the float as
an argument to the function, not call the function on the float.
example = 5.4 result = round(example) print(result) # 👉️ 5
Instead of accessing the
round() function on the float, e.g.
example.round(), we have to pass the floating point number as an argument to
If you need to check whether an object contains an attribute, use the
example = 5.4 if hasattr(example, 'round'): print(example.round) else: print('Attribute is not present on object') # 👉️ this runs
The hasattr function takes the following 2 parameters:
|The object we want to test for the existence of the attribute|
|The name of the attribute to check for in the object|
hasattr() function returns
True if the string is the name of one of the
object's attributes, otherwise
False is returned.
hasattrfunction would handle the error if the attribute doesn't exist on the object, however you still have to figure out where the variable gets assigned a float value in your code.
A good way to start debugging is to
print(dir(your_object)) and see what
attributes the object has.
Here is an example of what printing the attributes of a
float looks like.
example = 5.4 # [..., 'as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real', ...] print(dir(example))
If you pass a class to the dir() function, it returns a list of names of the classes' attributes, and recursively of the attributes of its bases.
If you try to access any attribute that is not in this list, you would get the "AttributeError: float object has no attribute" error.
To solve the error, either convert the value to the correct type before accessing the attribute, or correct the type of the value you are assigning to the variable before accessing any attributes.