So you have encountered the exception, i.e., TypeError: ‘str’ object is not callable. In the following article, we will discuss type errors, how they occur and how to resolve them.
What is a TypeError?
The TypeError occurs when you try to operate on a value that does not support that operation. The most common reason for an error in a Python program is when a certain statement is not in accordance with the prescribed usage. The Python interpreter immediately raises a type error when it encounters an error, usually along with an explanation. For instance:
val1 = 100
val2 = "random text"
print(val1/val2)
When you try to divide an integer value with a string, it results in a type error.
Why is the ‘str’ object not callable?
Like any TypeError, the ‘str’ object is not callable occurs when we try to perform an operation not supported by that datatype. In our case, here it’s the ‘string’ datatype. Let’s see some examples of where it can occur and how we can resolve them.
Example 1:
str = "This is text number 1"
string2 = "This is text number 2"
print(str(str) + string2)
In the code above, we have deliberately defined the first variable name with a reserved keyword called str. Moreover, the second variable, string2, follows Python’s naming conventions. In the print statement, we use the str method on the str variable, this confuses the Python’s interpreter, and it raises a type error, as shown in the image below.
Example 2:
string1 = "This is text number 1"
string2 = "This is text number 2"
print("%s %s" (string1,string2))
Contrary to example 1, where we had defined a variable with the str reserved keyword, which raised an error. In the example 2 code, we are using the ‘ % ‘ operator to perform string formatting. However, there is a minor issue in the syntax. We have omitted the % before the tuple. Missing this symbol can raise a similar error.
How to resolve this error?
The solution to example 1:
In Python, the str() function converts values into a string. It takes an object as an argument and converts it into a string. The str is a pre-defined function and also a reserved keyword. Therefore, it can’t be used as a variable name as per Python’s naming conventions.
To resolve the error, use another variable name.
string1 = "This is text number 1"
string2 = "This is text number 2"
print(str(string1) + string2)
The solution to example 2:
In example 2, we tried to use string formatting to display string1 and string2 together. However, not using the % operator before the tuples of values TypeError: ‘str’ object is not a callable error that gets thrown. To resolve it, use the % operator in its proper place.
string1 = "This is text number 1"
string2 = "This is text number 2"
print("%s %s" %(string1,string2))
TypeError: ‘str’ object is not callable Selenium
This error is likely due to accidentally invoking a function() which is actually a property. Please check your code for this.
TypeError ‘str’ object is not callable BeautifulSoup/Django/Collab
Irrespective of the library used, this error can creep in if you have used some reserved keyword as a variable or redefined some property or a function of the library. Please check your code for such things.
TypeError ‘str’ object is not callable matplotlib
Somewhere in the code, you might have used plt.xlabel = “Some Label”. This will change the import of matplotlib.pyplot. Try to close the Notebook and restart your Kernel. After the restart, rerun your code, and everything should be fine.
FAQs
To fix this error, you need to ensure that no variable is named after the str reserved keyword. Change it if this is the case.
TypeError generally occurs if an improper naming convention has been used, in other words, if the str keyword is used as a variable name.
This error is likely due to accidentally overwriting one of the PySpark functions with a string. Please check your code for this.
Conclusion
In this article, we discussed where the ‘str’ object is not callable error can occur and how we can resolve it. This is an easy error to fix. We must ensure we don’t use the reserved keywords for naming variables. In addition, we also have to avoid redefining default methods.