How to fix TypeError: 'float' object is not callable in Python

One error that you might encounter when working with Python is:

TypeError: 'float' object is not callable

This error occurs when you mistakenly call a float object as if it was a function.

The following code is an example that causes this error:

5.555()

There are three possible scenarios that cause this error:

  1. You attempt to multiply a float without adding the * operator
  2. You override the float() function with a float object
  3. You have a function and a float variable with the same name

This tutorial shows how to reproduce the error in each scenario and how to fix it.

1. You attempt to multiply a float without adding the * operator

First, you declared a simple float variable as follows:

my_float = 7.2

Next, you attempt to multiply the float variable with a number acquired from math operations as follows:

x = my_float(5 - 2)

Output:

Traceback (most recent call last):
  File "main.py", line 3, in <module>
    x = my_float(5 - 2)
        ^^^^^^^^^^^^^^^
TypeError: 'float' object is not callable

The error occurs because you’re adding parentheses next to a float object.

While the above is a valid multiplication formula in real life, this makes Python thinks you’re trying to call a function named my_float() instead of trying to do a multiplication.

To resolve this error, you need to make sure that you’re not adding parentheses next to a float object.

Since you want to multiply the variable, add the multiplication operator * as follows:

my_float = 7.2

x = my_float * (5 - 2)

print(x)  # 21.6

This time, the multiplication succeeds and we didn’t receive an error.

2. You override the float() function with a float object

The built-in function named float() is used to convert an object of another type into a float object.

For example, here’s how to convert a string into a float:

my_string = "7.55"

my_float = float(my_string)
print(my_float)  # 7.55

If you mistakenly create a variable named float, then the float() function would be overwritten.

When you call the float() function, the error would occur as follows:

float = 3.45

another_float = float("7.55")

Output:

Traceback (most recent call last):
  File "/main.py", line 3, in <module>
    another_float = float("7.55")
                    ^^^^^^^^^^^^^
TypeError: 'float' object is not callable

Because you created a variable named float, the float() function gets replaced with that variable, causing you to call a float object instead of the built-in function.

To avoid this error, you need to declare the variable using another name:

my_float = 3.45  # ✅

another_float = float("7.55")

This way, the keyword float would still point to the float function, and the error won’t be raised.

You have a function and a float variable with the same name

Suppose you have a function named get_name() that returns a string as follows:

def get_name():
    return "Nathan"

Then down the line, you declared a variable using get_name as the identifier:

get_name = 7.67

This cause the get_name variable to shadow the get_name() function. When you try to call the function, Python thinks you’re calling the variable instead:

def get_name():
    return "Nathan"

get_name = 7.67

res = get_name()  # TypeError: 'float' object is not callable

To resolve this error, make sure that there’s no duplicate name in your source code.

Each function and variable must have a unique name:

def get_name():
    return "Nathan"

x = 7.67

res = get_name()  # ✅

Now that the name for the function and the variable are unique, we didn’t receive any error.

Conclusion

The TypeError: 'float' object is not callable occurs in Python when you call a float object using parentheses like it’s a function.

To resolve this error, you need to make sure that you’re not calling a float object in your source code.

I hope this tutorial helps. Happy coding!

Take your skills to the next level ⚡️

I'm sending out an occasional email with the latest tutorials on programming, web development, and statistics. Drop your email in the box below and I'll send new stuff straight into your inbox!

No spam. Unsubscribe anytime.