The first error is in the line
ans = raw_input().lower()("This is one of those times when only Yes/No will do!"
"n" "So what will it be? Yes? No?")
The result of lower()
is a string, and parentheses after that mean that the object on the left (the string) gets called. Therefore, you get your error. You want
ans = raw_input("This is one of those times when only Yes/No will do!n"
"So what will it be? Yes? No?").lower()
Also,
if ans() == 'yes' or 'no':
does not what you expect. Again, ans
is a string, and parentheses mean that the object on the left (the string) gets called. Therefore, you get your error.
Also, or
is a logical operator. Even after removing the parentheses after ans
, the code gets evaluated as:
if (ans == 'yes') or ('no'):
Since a non-empty string ('no'
) evaluates to the boolean value True, this expression is always True. You simply want
if ans in ('yes', 'no'):
Additionally, you want to unindent the last lines. All in all, try:
name = raw_input("Welcome soldier. What is your name? ")
print('Ok, ' + name + ' we need your help.')
ans = raw_input("Do you want to help us? (Yes/No)").lower()
while True:
if ans in ('yes', 'no'):
break
print("This is one of those times when only Yes/No will do!n")
ans = raw_input("So what will it be? Yes? No?").lower()
if ans == "yes":
print("Good!")
elif ans == "no":
print("I guess I was wrong about you..." 'n' "Game over.")
Every programming language has certain keywords with specific, prebuilt functionalities and meanings.
Naming your variables or functions after these keywords is most likely going to raise an error. We’ll discuss one of these cases in this article — the TypeError: 'str' object is not callable
error in Python.
The TypeError: 'str' object is not callable
error mainly occurs when:
- You pass a variable named
str
as a parameter to thestr()
function. - When you call a string like a function.
In the sections that follow, you’ll see code examples that raise the TypeError: 'str' object is not callable
error, and how to fix them.
Example #1 – What Will Happen If You Use str
as a Variable Name in Python?
In this section, you’ll see what happens when you used a variable named str
as the str()
function’s parameter.
The str()
function is used to convert certain values into a string. str(10)
converts the integer 10
to a string.
Here’s the first code example:
str = "Hello World"
print(str(str))
# TypeError: 'str' object is not callable
In the code above, we created a variable str
with a value of «Hello World». We passed the variable as a parameter to the str()
function.
The result was the TypeError: 'str' object is not callable
error. This is happening because we are using a variable name that the compiler already recognizes as something different.
To fix this, you can rename the variable to a something that isn’t a predefined keyword in Python.
Here’s a quick fix to the problem:
greetings = "Hello World"
print(str(greetings))
# Hello World
Now the code works perfectly.
Example #2 – What Will Happen If You Call a String Like a Function in Python?
Calling a string as though it is a function in Python will raise the TypeError: 'str' object is not callable
error.
Here’s an example:
greetings = "Hello World"
print(greetings())
# TypeError: 'str' object is not callable
In the example above, we created a variable called greetings
.
While printing it to the console, we used parentheses after the variable name – a syntax used when invoking a function: greetings()
.
This resulted in the compiler throwing the TypeError: 'str' object is not callable
error.
You can easily fix this by removing the parentheses.
This is the same for every other data type that isn’t a function. Attaching parentheses to them will raise the same error.
So our code should work like this:
greetings = "Hello World"
print(greetings)
# Hello World
Summary
In this article, we talked about the TypeError: 'str' object is not callable
error in Python.
We talked about why this error might occur and how to fix it.
To avoid getting this error in your code, you should:
- Avoid naming your variables after keywords built into Python.
- Never call your variables like functions by adding parentheses to them.
Happy coding!
Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started
✋ Update: This post was originally published on my blog decodingweb.dev, where you can read the latest version for a 💯 user experience. ~reza
The “TypeError: ‘str’ object is not callable” error occurs when you try to call a string value (str
object) as if it was a function!
Here’s what the error looks like:
Traceback (most recent call last):
File "/dwd/sandbox/test.py", line 5, in
print(str + str(age))
^^^^^^^^
TypeError: 'str' object is not callable
Enter fullscreen mode
Exit fullscreen mode
Calling a string value as if it’s a callable isn’t what you’d do on purpose, though. It usually happens due to a wrong syntax or overriding a function name with a string value.
Let’s explore the common causes and their solutions.
How to fix TypeError: ‘str’ object is not callable?
This TypeError happens under various scenarios:
- Declaring a variable with a name that’s also the name of a function
- Calling a method that’s also the name of a property
- Calling a method decorated with
@property
Declaring a variable with a name that’s also the name of a function: A Python function is an object like any other built-in object, such as str
, int
, float
, dict
, list
, etc.
All built-in functions are defined in the builtins
module and assigned a global name for easier access. For instance, str()
refers to the __builtins__.str()
function.
That said, overriding a function (accidentally or on purpose) with a string value is technically possible.
In the following example, we have two variables named str
and age
. To concatenate them, we need to convert age
to a string value by using the built-in str()
function.
str = 'I am ' # ⚠️ str is no longer pointing to a function
age = 25
# ⛔ Raises TypeError: 'str' object is not callable
print(str + str(age))
Enter fullscreen mode
Exit fullscreen mode
If you run the above code, Python will complain with a «TypeError: ‘str’ object is not callable» error because we’ve assigned str
to another value ('I am '
). and 'I am '
isn’t callable.
You have two ways to fix the issue:
- Rename the variable
str
- Explicitly access the
str()
function from the builtins module (__bultins__.str
)
The second approach isn’t recommended unless you’re developing a module. For instance, if you want to implement an open()
function that wraps the built-in open()
:
# Custom open() function using the built-in open() internally
def open(filename):
# ...
__builtins__.open(filename, 'w', opener=opener)
# ...
Enter fullscreen mode
Exit fullscreen mode
In almost every other case, you should always avoid naming your variables as existing functions and methods. But if you’ve done so, renaming the variable would solve the issue.
So the above example could be fixed like this:
text = 'I am '
age = 25
print(text + str(age))
# Output: I am 25
Enter fullscreen mode
Exit fullscreen mode
This issue is common with function names you’re more likely to use as variable names. Functions such as str
, type
, list
, dir
, or even user-defined functions.
In the following example, we declare a variable named len
. And at some point, when we call len()
to check the input, we’ll get an error:
len = '' # ⚠️ len is set to an empty string
name = input('Input your name: ')
# ⛔ Raises TypeError: 'str' object is not callable
if (len(name)):
print(f'Welcome, {name}')
Enter fullscreen mode
Exit fullscreen mode
To fix the issue, all we need is to choose a different name for our variable:
length = ''
name = input('Input your name: ')
if (len(name)):
print(f'Welcome, {name}')
Enter fullscreen mode
Exit fullscreen mode
⚠️ Long story short, you should never use a function name (built-in or user-defined) for your variables!
Overriding functions (and calling them later on) is the most common cause of the «TypeError: ‘str’ object is not callable» error. It’s similar to calling integer numbers as if they’re callables.
Now, let’s get to the less common mistakes that lead to this error.
Calling a method that’s also the name of a property: When you define a property in a class constructor, any further declarations of the same name (e.g., methods) will be ignored.
class Book:
def __init__(self, title):
self.title = title
def title(self):
return self.title
book = Book('Head First Python')
# ⛔ Raises "TypeError: 'str' object is not callable"
print(book.title())
Enter fullscreen mode
Exit fullscreen mode
In the above example, since we have a property named title
, the method title()
is ignored. As a result, any reference to title
will return the property title
, which returns a string value. And if you call this string value like a function, you’ll get the «TypeError: ‘str’ object is not callable» error.
The name get_title
sounds like a safer and more readable alternative:
class Book:
def __init__(self, title):
self.title = title
def get_title(self):
return self.title
book = Book('Head First Python')
print(book.get_title())
# Output: Head First Python
Enter fullscreen mode
Exit fullscreen mode
Calling a method decorated with @property
decorator: The @property
decorator turns a method into a “getter” for a read-only attribute of the same name.
class Book:
def __init__(self, title):
self._title = title
@property
def title(self):
"""Get the book price"""
return self._title
book = Book('Head First Python')
# ⛔ Raises "TypeError: 'str' object is not callable"
print(book.title())
Enter fullscreen mode
Exit fullscreen mode
You need to access the getter method without the parentheses:
class Book:
def __init__(self, title):
self._title = title
@property
def title(self):
"""Get the book price"""
return self._title
book = Book('Head First Python')
print(book.title)
# Output: Head First Python
Enter fullscreen mode
Exit fullscreen mode
Problem solved!
Alright, I think it does it! I hope this quick guide helped you fix your problem.
Thanks for reading.
❤️ You might like:
- How to fix «‘float’ object is not callable» in Python
- How to fix «‘int’ object is not callable» in Python
- How to fix «Not all arguments converted during string formatting error» in Python
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.
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
How do I fix the str object that is not callable?
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.
What does str object is not callable mean?
TypeError generally occurs if an improper naming convention has been used, in other words, if the str keyword is used as a variable name.
TypeError ‘str’ object is not callable pyspark
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.
Trending Python Articles
-
[Fixed] SSL module in Python is Not Available
●May 30, 2023
-
Mastering Python Translate: A Beginner’s Guide
by Namrata Gulati●May 30, 2023
-
Efficiently Organize Your Data with Python Trie
by Namrata Gulati●May 2, 2023
-
[Fixed] modulenotfounderror: no module named ‘_bz2
by Namrata Gulati●May 2, 2023
Table of Contents
Hide
- What is typeerror: ‘str’ object is not callable in Python?
- Scenario 1 – Declaring a variable name called “str”
- Solving typeerror: ‘str’ object is not callable in Python.
- Scenario 2 – String Formatting Using %
One of the most common errors in Python programming is typeerror: ‘str’ object is not callable, and sometimes it will be painful to debug or find why this issue appeared in the first place.
Python has a built-in method str()
which converts a specified value into a string. The str()
method takes an object as an argument and converts it into a string.
Since str()
is a predefined function and a built-in reserved keyword in Python, you cannot use it in declaring it as a variable name or a function name. If you do so, Python will throw a typeerror: ‘str‘ object is not callable.
Let us take a look at few scenarios where you could reproduce this error.
Scenario 1 – Declaring a variable name called “str”
The most common scenario and a mistake made by developers are declaring a variable named ‘str
‘ and accessing it. Let’s look at a few examples of how to reproduce the ‘str’ object is not callable error.
str = "Hello, "
text = " Welcome to ItsMyCode"
print(str(str + text))
# Output
Traceback (most recent call last):
File "c:ProjectsTryoutslistindexerror.py", line 4, in <module>
print(str(str + text))
TypeError: 'str' object is not callable
In this example, we have declared ‘str
‘ as a variable, and we are also using the predefined str()
method to concatenate the string.
str = "The cost of apple is "
x = 200
price= str(x)
print((str + price))
# output
Traceback (most recent call last):
File "c:ProjectsTryoutslistindexerror.py", line 3, in <module>
price= str(x)
TypeError: 'str' object is not callable
The above code is similar to example 1, where we try to convert integer x into a string. Since str
is declared as a variable and if you str()
method to convert into a string, you will get object not callable error.
Solving typeerror: ‘str’ object is not callable in Python.
Now the solution for both the above examples is straightforward; instead of declaring a variable name like “str” and using it as a function, declare a more meaningful name as shown below and make sure that you don’t have “str” as a variable name in your code.
text1 = "Hello, "
text2 = " Welcome to ItsMyCode"
print(str(text1 + text2))
# Output
Hello, Welcome to ItsMyCode
text = "The cost of apple is "
x = 200
price= str(x)
print((text + price))
# Output
The cost of apple is 200
Scenario 2 – String Formatting Using %
Another hard-to-spot error that you can come across is missing the %
character in an attempt to append values during string formatting.
If you look at the below code, we have forgotten the string formatting %
to separate our string and the values we want to concatenate into our final string.
print("Hello %s its %s day"("World","a beautiful"))
# Output
Traceback (most recent call last):
File "c:ProjectsTryoutslistindexerror.py", line 1, in <module>
print("Hello %s its %s day"("World","a beautiful"))
TypeError: 'str' object is not callable
print("Hello %s its %s day"%("World","a beautiful"))
# Output
Hello World its a beautiful day
In order to resolve the issue, add the %
operator before replacing the values ("World","a beautiful")
as shown above.
Srinivas Ramakrishna is a Solution Architect and has 14+ Years of Experience in the Software Industry. He has published many articles on Medium, Hackernoon, dev.to and solved many problems in StackOverflow. He has core expertise in various technologies such as Microsoft .NET Core, Python, Node.JS, JavaScript, Cloud (Azure), RDBMS (MSSQL), React, Powershell, etc.
Sign Up for Our Newsletters
Subscribe to get notified of the latest articles. We will never spam you. Be a part of our ever-growing community.
By checking this box, you confirm that you have read and are agreeing to our terms of use regarding the storage of the data submitted through this form.