mutable-default-argument
Mutable default arguments are shared between calls and cause bugs
Applies to: Python
Why this matters
When you use a mutable default like `def foo(items=[])`, the same list is reused for every call. Adding to it in one call affects all future calls! This is one of Python's most famous gotchas.
Catch it before it ships
pip install stablestack # or: npx stablestackstablestack # scans your project, QUAL004 includedstablestack explain QUAL004QUAL004 is part of the Pro rule set. See pricing — the free tier ships 24 checks with no signup.
False positive in your codebase? Suppress a single line with # noqa: QUAL004
More Code Quality checks
exception-swallowing
Silently swallowed exceptions hide bugs and make debugging hard
QUAL002unnamed-thread
Threads without names are hard to identify in debugging tools
QUAL003complex-tuple
Tuples with 3+ elements are hard to understand - use a dataclass instead
QUAL005print-statement
Print statements are typically debugging code that shouldn't be committed
QUAL006todo-comment
TODO/FIXME comments indicate incomplete or problematic code
QUAL007broad-exception
Catching all exceptions hides bugs and makes debugging hard
QUAL008magic-number
Magic numbers make code hard to understand and maintain
QUAL009file-too-long
File exceeds recommended maximum length.