AttributeError: 'int' object has no attribute (Fix)
Fix the error AttributeError: 'int' object has no attribute by finding where a number is being used like a string, list, dictionary, or custom object.
This usually means a variable contains an int, but your code is trying to use a method or attribute that belongs to some other type.
Quick fix
value = 123
# Wrong: integers do not have string methods
# print(value.lower())
# Fix 1: convert to string first
print(str(value).lower())
# Fix 2: check the type before calling an attribute
if isinstance(value, str):
print(value.lower())
else:
print(value)
This error happens when you call a method or access an attribute that integers do not have, such as .lower(), .append(), .keys(), or a custom attribute name.
What this error means
Python is telling you:
- It found an integer value such as
5,100, or-3 - Your code tried to use an attribute or method on that integer
- That attribute does not exist for
int - The real problem is often that the variable has a different type than you expected
For example, this will fail because .lower() is a string method, not an integer method:
value = 100
print(value.lower())
Simple example that causes the error
Here is a small example:
value = 123
print(value.lower())
Output:
AttributeError: 'int' object has no attribute 'lower'
Why this happens:
valuecontains the integer123.lower()works on strings such as"HELLO"- Integers do not have a
.lower()method
Correct version:
value = 123
print(str(value).lower())
Output:
123
If you need help with string behavior, see Python strings explained.
Common causes
This error often happens in one of these situations:
- Using string methods on a number, such as
.lower(),.strip(), or.split() - Using list methods on a number, such as
.append() - Using dictionary methods on a number, such as
.keys()or.get() - Overwriting a variable with an integer later in the program
- Converting input with
int()and then forgetting the value is no longer a string - A function returns an integer but you treat it like an object with custom attributes
Examples of common mistakes:
value = 10
value.append(20) # int has no .append()
value = 42
print(value.keys()) # int has no .keys()
user_input = int(input("Enter a number: "))
print(user_input.strip()) # .strip() works on strings, not ints
How to fix it
Start with the simplest check: inspect the value and its type.
value = 123
print(value)
print(type(value))
Output:
123
<class 'int'>
Useful steps:
- Print the variable and its type with
print(value, type(value)) - Check where the variable was last assigned
- Use the correct method for the actual type
- Convert the value first if needed, such as
str(number) - Rename variables clearly so you do not confuse text values and number values
- Add
isinstance()checks when the type may change
The built-in type() function and isinstance() function are especially helpful for this kind of bug.
Fix example: convert to the right type
If your goal is to use string methods, convert the integer to a string first.
Wrong
value = 456
print(value.split())
Right
value = 456
text = str(value)
print(text.split())
Output:
['456']
Another example with .lower():
value = 123
text = str(value)
print(text.lower())
Output:
123
If your real goal is math, do not convert to a string. Keep the value as an integer and use numeric operations instead.
value = 123
print(value + 10)
Output:
133
If you specifically need this conversion, see how to convert int to string in Python.
Fix example: find accidental reassignment
A variable may start as one type and later become an integer.
Example that fails
value = "HELLO"
print(value.lower())
value = 100
print(value.lower())
Output:
hello
AttributeError: 'int' object has no attribute 'lower'
The problem is that value was reassigned.
A simple way to debug this is to print the variable before the failing line:
value = "HELLO"
print(value.lower())
value = 100
print("Before lower():", value)
print("Type:", type(value))
print(value.lower())
Output:
hello
Before lower(): 100
Type: <class 'int'>
AttributeError: 'int' object has no attribute 'lower'
A better fix is to use clearer variable names:
message = "HELLO"
print(message.lower())
count = 100
print(count + 1)
This is a very common mistake in longer scripts and loops.
Beginner debugging steps
When you see this error, follow these steps:
- Read the full error message carefully
- Find the line that caused the problem
- Print the variable right before that line
- Print
type(variable)to confirm it is anint - Search earlier in the code for where that variable was assigned
- Check function return values if the variable came from a function
- Make sure your fix matches the type you actually want
These commands are useful while debugging:
print(value)
print(type(value))
print(isinstance(value, int))
print(isinstance(value, str))
print(dir(value))
What they do:
print(value)shows the current valueprint(type(value))shows the exact typeprint(isinstance(value, int))checks whether it is an integerprint(isinstance(value, str))checks whether it is a stringprint(dir(value))shows available attributes and methods
If you are new to debugging, read this beginner guide to debugging Python code.
Related errors to compare
Sometimes the problem is similar, but the type is different.
You may also want to check:
- AttributeError: object has no attribute
- AttributeError: 'str' object has no attribute
- AttributeError: 'list' object has no attribute
- AttributeError: 'NoneType' object has no attribute
Common mistakes
These are very common beginner mistakes that cause this error:
- Calling
.lower()on an integer - Calling
.append()on an integer - Calling
.keys()on an integer - Reusing a variable name and changing it from string to int
- Using
int(input(...))and later treating the result like text - Expecting a custom object but receiving a plain integer
For example:
age = int(input("Enter your age: "))
print(age.strip())
This fails because age is already an integer after int(...).
If you wanted text methods like .strip(), do them before converting:
age_text = input("Enter your age: ").strip()
age = int(age_text)
print(age)
FAQ
Why does Python say an int has no attribute?
Because your variable currently holds an integer, and the attribute or method you used does not exist for integers.
How do I know which variable is an int?
Check the traceback, then print the variable and its type right before the line that fails.
Can I use string methods on a number?
Not directly. Convert the number to a string first with str(number) if that matches your goal.
Why did this work earlier but fail now?
The variable may have been reassigned later in the code and changed from another type to int.