attributeerror: ‘nonetype’ object has no attribute ‘keys’

In this post, we will discuss on how to resolve the attributeerror: ‘nonetype’ object has no attribute keys, what error means and what are the causes of error?

As a programmer, it is possible that you’ve encountered an AttributeError in your code.

One is AttributeError that can be frustrating to debug if the ‘NoneType’ object has no attribute ‘keys’ error.

What Causes the AttributeError: NoneType object has no attribute items Error?

The “AttributeError: NoneType’object has no attribute items error usually occurs if you are trying to access the ‘items’ attribute of a ‘NoneType’ object.

This commonly happens if you have a variable or object that should contain a value, yet it contains ‘None’.

Common causes of error

  • It is possible that you assigned a variable to None and you are trying to access its keys attribute.
  • Return value of a function
  • It is possible you are passing a None object as a parameter to a function that expects a dictionary, you will get this error.

Also, read or visit the other resolved error in Python:

How to solve the AttributeError: ‘NoneType’ object has no attribute ‘keys’ Error?

Time needed: 3 minutes

Here are some solutions to solve the ‘NoneType’ object has no attribute ‘keys’ error:

  • Solution 1: Check for None values

    The easiest solution to avoid this error is to check for None values before accessing their attributes.

    For example, if you have a dictionary object which is None, you can check the following code:

    my_dictionary = None
    if my_dict is not None:
    keys = my_dict.keys()

  • Solution 2: Check for the return value of functions

    If you are assuming a dictionary object as the return value of a function, you will make sure to check if the return value is not None before accessing its attributes.

    For example:

    def get_dictionary():
    if condition:
    return my_dictionary
    else:
    return None
    result = dictionary()
    if result is not None:
    keys = result.keys()

  • Solution 3: Use try-except statements

    You can also use try-except statements to manage the ‘NoneType’ object has no attribute ‘keys’ error.

    This solution is very useful if you can’t avoid None values in your code.

    For example:

    my_dictionary= None
    try:
    keys = my_dictionary.keys()
    except AttributeError:
    keys = None

Why “NoneType has no attribute X” happens

This AttributeError fires when a variable is None but you try to call a method or access a property on it. Python’s None is a distinct type with only a handful of attributes — no user methods exist on it. Any dotted access on None raises AttributeError.

Common triggers

  • Function returned None implicitly. A function without an explicit return statement falls through to None. Missing else branches, filter results, and lookup misses are common sources.
  • Method chaining on mutating operations. list.sort(), list.append(), and set.add() return None — they mutate in place. Chaining my_list.sort().reverse() fails.
  • Dictionary lookups with missing keys. my_dict.get(key) returns None if the key is missing. Always provide a default: my_dict.get(key, default).
  • Regex match returned None. re.match returns None when no match. Guard before calling .group().
  • Failed database queries. ORM .first() and .find_one() return None on empty results.

Diagnostic pattern

# BAD — no defensive check
def get_user_config(user_id):
    return db.query(User).filter_by(id=user_id).first()

user = get_user_config(42)
name = user.name  # AttributeError: 'NoneType' object has no attribute 'name'

# GOOD — guard for None, fail fast with a clear message
def get_user_config(user_id):
    user = db.query(User).filter_by(id=user_id).first()
    if user is None:
        raise ValueError(f"User not found: {user_id}")
    return user

# Or use Optional pattern
from typing import Optional
def get_user_config(user_id) -> Optional[User]:
    return db.query(User).filter_by(id=user_id).first()

user = get_user_config(42)
if user is not None:
    name = user.name

Best practices

  • Use Optional type hints. Signal that a function may return None so callers must handle it.
  • Fail fast at boundaries. Raise a clear exception in helper functions instead of returning None silently.
  • Use mypy or Pyright. Static type checkers catch NoneType errors before runtime.
  • Guard with “is not None”. Explicit is None checks are the Pythonic way, not if x: (fails on 0 and empty strings).

Frequently Asked Questions

What is Python AttributeError and what causes it?

AttributeError is raised when you access an attribute or method that doesn’t exist on the object. Most common cause: calling a method on None (NoneType has no attribute X). Other causes: typo in method name, wrong object type (str when you expected list), or using a feature removed in a newer library version. The error names exactly which type and which missing attribute.

How do I fix ‘NoneType object has no attribute’?

The variable you’re accessing is None, but you expected an object. Trace back to where it was assigned: a function returning None instead of an object (forgot to return), a database query returning no rows (Model.objects.first() returns None when empty), or an API call that failed silently. Safe pattern: if obj is not None: obj.method() OR use the walrus operator: if (obj := get_obj()): obj.method().

How do I check if an attribute exists before accessing it?

Use hasattr(obj, ‘attr_name’) for runtime check, or getattr(obj, ‘attr_name’, default) to get-with-default. For frequent attribute checks, consider type hints + mypy/pyright which catch most AttributeErrors at static-analysis time before runtime.

How do I prevent AttributeError from None values?

Three patterns: (1) Always validate function returns (if result is None: raise). (2) Use type hints with Optional[X] to make None-ability explicit. (3) Use the walrus operator + early return: if (val := get_val()) is None: return default; use val. Defensive coding around None-able returns prevents 90% of AttributeError in production.

Where can I find more AttributeError fixes?

Browse the AttributeError reference hub for 170+ specific fixes (NoneType, pandas, NumPy, sklearn, Selenium). For related errors see TypeError. For Python debugging fundamentals see Python Tutorial hub.

Conclusion

In conclusion, the ‘NoneType’ object has no attribute ‘keys’ error is a common error that is possible you encounter when you are running a Python code.

It should occur for different reasons, like variable assignment mistakes, incorrect parameter passing, or return values of functions.

Through following the above solutions, you can solve this error and ensure that your Python code runs smoothly.

Adones Evangelista


Programmer & Technical Writer at PIES IT Solution

Adones Evangelista is a programmer and writer at PIES IT Solution, author of over 900 tutorials and error-fix guides at itsourcecode.com. Specializes in JavaScript, Django, Laravel, and Python error debugging covering ValueError, TypeError, AttributeError, ModuleNotFoundError, and RuntimeError, plus C/C++ and PHP capstone projects for BSIT students.

Expertise: JavaScript · Python · Django · Laravel · Error Debugging · C/C++
 · View all posts by Adones Evangelista →

Leave a Comment