agentsclimarketplace

Python none attribute access

Skill viditkbhatnagar/immunize/src/immunize/patterns/python-none-attribute-access

A curated pattern library that stops AI coding assistants from repeating common runtime errors. No API key. No LLM calls at runtime.

Install
npx -y skills add viditkbhatnagar/immunize --skill python-none-attribute-access

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Use when writing Python that calls a function returning an Optional value (e.g., dict.get, re.search) before accessing attributes on the result.

SKILL.md

1.6 KB, as published. Nobody here has run it

python-none-attribute-access

Before dereferencing an Optional, check for None. dict.get(key) returns None when the key is missing; re.search(...) returns None on no match; many ORMs return None for "not found." Accessing any attribute on that None raises:

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

Type checkers flag this, but runtime code often slips through — the AttributeError only surfaces on the unlucky input.

Example

Wrong — crashes when user_id is not in the registry:

def lookup_display_name(registry: dict[str, User], user_id: str) -> str:
    user = registry.get(user_id)
    return user.name

Right — handle the None case explicitly:

def lookup_display_name(registry: dict[str, User], user_id: str) -> str:
    user = registry.get(user_id)
    if user is None:
        return "unknown"
    return user.name

Don't catch AttributeError

Wrapping the access in try: ... except AttributeError: hides real bugs — a typo in an attribute name becomes silent. The correct fix is an explicit None check, a sentinel default, or failing fast with a clearer error.

Sentinel alternatives

  • dict.get(key, default) — pass a fallback directly.
  • if key not in registry: — fail fast with a specific error message.
  • registry.setdefault(key, default_user) — ensure the slot exists.

Pick the option whose semantics match what the caller expects to see when the value is missing.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.