TypeError: 'str' object is not callable
This means you’re trying to call a string as if it were a function — using () on something that’s a string, not a function.
Fix 1: You named a variable str
The most common cause. You accidentally overwrote Python’s built-in str() function:
# ❌ This shadows the built-in str()
str = "hello"
number = 42
text = str(number) # TypeError! str is now "hello", not the function
# ✅ Don't use 'str' as a variable name
message = "hello"
number = 42
text = str(number) # Works: "42"
Same problem with other built-ins: list, dict, int, float, type, input, print.
Quick fix — restart your Python session or delete the variable:
del str # Restores the built-in
Fix 2: Using parentheses instead of brackets
# ❌ Parentheses = function call
name = "hello"
first_char = name(0) # TypeError!
# ✅ Brackets = indexing
first_char = name[0] # "h"
Fix 3: Missing an operator
# ❌ Python thinks you're calling the string
greeting = "hello" "world"(x) # Confusing syntax
# ✅ Be explicit
greeting = "hello" + "world"
Fix 4: Calling a property that’s a string
class User:
name = "Alice"
user = User()
# ❌ name is a string, not a method
user.name() # TypeError!
# ✅ Access it as a property
print(user.name) # "Alice"
How to debug
Add a type check before the failing line:
print(type(str)) # Should be <class 'type'>, not <class 'str'>
If it prints <class 'str'>, you’ve overwritten the built-in somewhere above.