AttributeError: 'NoneType' object has no attribute (Fix)

This error happens when you try to use an attribute or method on None.

In Python, None means “no value”. So if a variable is None, you cannot call methods like .strip(), .append(), .get(), or access attributes on it.

The fix is usually simple:

  • find where None came from
  • make sure you have the right object before using it
  • add a check or default value if None is possible

Quick fix

name = get_name()

if name is not None:
    print(name.strip())
else:
    print("No name returned")

This error happens when you try to use a method or attribute on None. Check the variable before calling methods like .strip(), .append(), or .get().

What this error means

Python expected an object that has a method or attribute.

But the value was None instead.

That is why code like this fails:

value = None
print(value.strip())

Output:

AttributeError: 'NoneType' object has no attribute 'strip'

Key idea:

  • None is a special value that means “nothing” or “no result”
  • NoneType is the type of None
  • methods like .strip() only work on real objects such as strings

If you are new to Python errors, see Python errors and exceptions explained.

Why this happens

This error usually means one of these things happened:

  • A function did not return a value, so Python used None
  • You assigned the result of an in-place method like list.sort()
  • A dictionary lookup or function returned None
  • A variable was set to None earlier in the program
  • User input, file data, or API data was missing

Here are some common causes:

  • Calling a method on the result of a function that returns nothing
  • Using the result of list.sort() as if it were a new list
  • Expecting dict.get() to always return a real value
  • Reading missing data from a file, API, or form
  • Overwriting a valid variable with None

Example that causes the error

A very common cause is a function that has no return statement.

def get_name():
    print("Getting name...")

name = get_name()

print(name)
print(type(name))
print(name.strip())

Output:

Getting name...
None
<class 'NoneType'>
Traceback (most recent call last):
  ...
AttributeError: 'NoneType' object has no attribute 'strip'

What happened:

  • get_name() ran
  • the function did not return anything
  • Python returned None automatically
  • name.strip() failed because name was None

To fix it, return a real string:

def get_name():
    return "  Alice  "

name = get_name()
print(name.strip())

Output:

Alice

If you want a deeper explanation of this behavior, see return values in Python functions.

How to fix it

Use these steps to fix the error.

1. Find where the variable gets its value

Look at the line that causes the error, then trace backward.

For example:

username = get_user_name()
print(username.upper())

Do not focus only on upper(). The real question is:

Why is username equal to None?

2. Check whether a function needs a return statement

If a function should give you a value, it must use return.

Wrong:

def make_title(name):
    name.title()

title = make_title("python")
print(title)

Output:

None

Correct:

def make_title(name):
    return name.title()

title = make_title("python")
print(title)

Output:

Python

3. Do not assign the result of methods that change objects in place

Some methods modify an object and return None.

A common example is list.sort():

numbers = [3, 1, 2]
result = numbers.sort()

print(result)
print(result.append(4))

This fails because result is None.

Correct version:

numbers = [3, 1, 2]
numbers.sort()

print(numbers)
numbers.append(4)
print(numbers)

Output:

[1, 2, 3]
[1, 2, 3, 4]

4. Use an if check before accessing attributes

If None is a valid possible value, check first:

email = None

if email is not None:
    print(email.strip())
else:
    print("No email found")

5. Give the variable a default value if needed

Sometimes you want to replace None with a safe default.

name = None
clean_name = name or ""

print(clean_name.strip())

This works because clean_name becomes an empty string.

Be careful with this pattern. It also replaces other false-like values such as 0 and "". If you only want to handle None, write it clearly:

name = None
clean_name = "" if name is None else name

print(clean_name.strip())

Common patterns that return None

These often lead to this error:

  • functions without return
  • list.sort()
  • list.append()
  • list.extend()
  • dict.update()

Examples:

items = [1, 2]
result = items.append(3)

print(result)
print(type(result))

Output:

None
<class 'NoneType'>

Another example:

data = {"a": 1}
result = data.update({"b": 2})

print(result)

Output:

None

These methods change the original object directly. They do not create and return a new object.

Step-by-step debugging

When you see this error, use this simple process.

Read the full traceback

The traceback shows the exact line that failed.

Start there first.

Use small checks like these:

print(value)
print(type(value))
print(value is None)
print(repr(value))

These are especially useful when you are not sure what the variable contains.

Example:

def get_message():
    # imagine this came from another part of the program
    return None

message = get_message()

print(message)
print(type(message))
print(message is None)
print(repr(message))

print(message.strip())

Output before the crash:

None
<class 'NoneType'>
True
None

Trace backward to where the value was assigned

If this line fails:

print(profile.get("name").strip())

the problem may not be .strip() itself.

It may be:

  • profile is None
  • profile.get("name") returned None
  • the "name" key exists but its value is None

A safer version is:

profile = {"name": None}

name = profile.get("name")

if name is not None:
    print(name.strip())
else:
    print("Name is missing")

If you need help understanding .get(), see Python dictionary get() method.

Check return values from functions and methods

A lot of beginners assume every function returns something useful.

That is not always true.

If needed, print the result right away:

result = some_function()
print(result)

Ways to prevent the error

You can avoid this error more often by using a few good habits:

  • Return values clearly from functions
  • Use descriptive variable names
  • Avoid chaining methods when a value may be None
  • Handle missing data early
  • Use guard checks like if value is not None

For example, this is risky:

print(get_user_name().strip().title())

If get_user_name() returns None, the whole chain fails.

This is safer:

name = get_user_name()

if name is not None:
    print(name.strip().title())
else:
    print("No user name available")

You can also use exception handling, but in this case it is usually better to prevent the problem before it happens. If you want to learn more, see using try, except, else, and finally in Python and how to handle exceptions in Python.

FAQ

What is NoneType in Python?

NoneType is the type of None. It represents the absence of a value.

Why did my function return None?

If a function has no return statement, Python returns None automatically.

Why does list.sort() lead to this error sometimes?

list.sort() changes the list in place and returns None. You should not assign its result to a new variable.

Should I use try-except to fix this?

Usually no. It is better to find why the value is None and handle it before accessing attributes.

See also