Python Debugging Practice: 66 Bug Hunts on Real Code
66 Python bug hunts — 20 easy · 37 medium · 9 hard — each a small project with a planted bug, a bug report and hidden tests that decide whether the fix is…
- Hunts: 66
- By difficulty: 20 easy · 37 medium · 9 hard
- Reward: 50 XP per complete fix
Python services and scripts that ship with a defect — a mutable default argument, a generator consumed twice, money kept in floating point, a schedule that forgets the timezone, a webhook that can be replayed. Read the report, run the visible tests, fix the editable module and let the hidden tests judge the repair.
Every Python bug hunt
- Five Countries Missing From the Average Easy · Backend · Data · Off By One
- Four Hours of Any Password Easy · Backend · Auth · Security
- Good Time on the Enhancement Easy · Backend · Validation · Time
- Nine A.M. Somewhere Easy · Backend · Timezones · Scheduling
- Nobody Left to Fly Christmas Easy · Backend · Validation · State
- Pounds Where Kilograms Should Be Easy · Backend · Units · Math
- The 1900 Leap Year Lie Easy · Backend · Dates · Leap Years
- The Alarm That Slept In Easy · Backend · Time · Modulo
- The Backup That Always Said Yes Easy · Database · Reliability · Validation
- The Deposits Nobody Reported Easy · Backend · Validation · Money
- The Draft That Overwrote the Publish Easy · Backend · Sync · Timestamps
- The Ledger That Leaked Cents Easy · Database · Floating Point · Money
- The Metric Mars Mission Easy · Backend · Units · Conversion
- The Mutable Default Trap Easy · Backend · Python Gotchas · State
- The Negative Invoice Easy · Backend · Validation · Payments
- The Notification Echo Easy · Backend · Dedupe · State
- The Runaway Retry Easy · Database · Retries · Backoff
- The Uploader Nobody Checksummed Easy · Backend · Security · Validation
- Twelve Dollars for Google.com Easy · Backend · Validation · Parsing
- Two Digits Too Few Easy · Backend · Parsing · Y2K
- Infinite Leverage Hard · Backend · Finance · Validation
- The Backslash at the End of the Line Hard · Backend · Security · Overflow
- The Block Only Half the Network Accepted Hard · Backend · Consensus · Limits
- The Fsync That Lied on Retry Hard · Database · Retries · State
- The Lookalike Domain Hard · Backend · Security · Unicode
- The Signature Nonce That Never Changed Hard · Backend · Security · Randomness
- The Thruster That Spun It Faster Hard · Backend · Config · State
- The Track That Forgot Its Past Hard · Backend · State · Safety
- The Username That Changed When Asked Twice Hard · Backend · Security · Unicode
- alg: none Medium · Backend · Security · JWT
- Debts Averaged Out of Thin Air Medium · Backend · Money · Validation
- Default Country Roulette Medium · Backend · Parsing · Phones
- Every 256th Setup Medium · Backend · Overflow · State
- Half an Emoji in the Username Medium · Database · Unicode · Encoding
- Locked Out of Everything Medium · Backend · Networking · Validation
- Noon in Which Timezone? Medium · Backend · Timezones · Parsing
- NULL Isn't Equal to NULL Medium · Database · SQL · NULL Semantics
- Rounded Out of a Refund Medium · Backend · Rounding · Money
- The Backup That Backed Up Nothing Medium · Database · Backups · Validation
- The Cleanup Job That Ran Against Production Medium · Database · Access · Config
- The Cursor at the End of Time Medium · Database · Pagination · Parsing
- The Duplicate Check Skipped for Speed Medium · Backend · Security · Validation
- The Empty Argument List That Became Root Medium · Backend · Security · Bounds
- The Fees That Priced People Out Medium · Backend · Money · Validation
- The Final Invitation That Never Came Medium · Backend · Time · Validation
- The Folder Called .GIT Medium · Backend · Security · Validation
- The Gene Named September 2nd Medium · Backend · Coercion · Data Import
- The Generator That Vanished Medium · Backend · Iterators · Python Gotchas
- The Half-Applied Batch Medium · Database · Transactions · Atomicity
- The Hash That Started With a Zero Byte Medium · Backend · Security · Crypto
- The Hashes Without Salt Medium · Database · Security · Hashing
- The Index That Rounded Itself Poor Medium · Backend · Floating Point · Rounding
- The Installer That Deleted boot.ini Medium · Backend · Security · Validation
- The Invariant Off by a Hundred Medium · Backend · Money · Validation
- The Leap Day Meltdown Medium · Backend · Dates · Leap Years
- The Loss That Lost Its Minus Sign Medium · Database · Money · Accounting
- The Migration That Unblocked Everyone Medium · Database · Security · State
- The Missing Table Rows Medium · Backend · Lookup Tables · Null Safety
- The Optimistic Lock That Wasn't Medium · Database · Concurrency · Versioning
- The Path That Climbed Out Medium · Backend · Security · Path Traversal
- The Patriot's Drifting Clock Medium · Backend · Floating Point · Time
- The Replayed Webhook Medium · Backend · Security · Time
- The Reset Mail Sent to a Look-Alike Medium · Backend · Security · Unicode
- The Spreadsheet That Ran Out of Rows Medium · Database · Limits · Validation
- The Streak That Died at Midnight Medium · Backend · Time · Timezones
- Three Presses, Three Remittances Medium · Database · Idempotency · Money