Last Updated: June 6, 2026
An anti-pattern is a habit that looks reasonable, runs fine on small inputs, and breaks things later: a hidden bug, a security hole, an O(n^2) cliff, or code nobody else can read. Most Python anti-patterns come from one of two places: a feature whose behavior is more subtle than it looks (mutable defaults, is versus ==, bare except) and a habit imported from another language that fights Python's grain (manual indexing, type checks, god classes). This lesson walks through the common ones, shows what goes wrong, and gives the idiomatic fix for each.