Python Script Checker & Debugger

Paste a script or upload a .py file, then press Check. You'll see each problem's line and column, the code highlighted, a plain-English explanation and a suggested fix. Run executes the script in a sandbox and explains any error it raises.

Entering the Matrix… loading Python
ℹ️
This is an automatic, rule-based checker, not an AI. It uses Python's own parser, pyflakes and a set of hand-written rules for common mistakes, so it can miss problems or flag things that are fine. Everything runs in your browser (via Pyodide). Your code is never uploaded. It can't see the files on your computer, network access from scripts is limited, and it can't install every package.
Ln 1, Col 1 Ctrl+Enter check · Ctrl+Shift+Enter run · Tab indents (Esc then Tab leaves the editor)
Program input (for input(), one answer per line)

Results

Entering the Matrix…
loading Python
First load downloads about 10 MB (cached afterwards).

What it checks

  • Syntax: SyntaxError, IndentationError and TabError with the exact position (Python's own compile()).
  • Static checks (pyflakes): undefined names, unused imports and variables, redefinitions, f-strings without placeholders, is with literals.
  • Beginner rules: == None, mutable default arguments, bare except:, = instead of == in an if, missing self, Python 2 print, x == 1 or 2.
  • Run: shows matplotlib figures, reads input()/sys.stdin from the Program input box, and explains NameError, TypeError, IndexError, KeyError, AttributeError, ZeroDivisionError, ImportError / ModuleNotFoundError, ValueError, RecursionError and more.

Limits (please read)

  • Rule-based, not AI: it doesn't understand what your program is meant to do, and logic bugs usually pass.
  • Runs Python 3.x in a WebAssembly sandbox. It can't read or write files on your computer, start other programs, open GUI windows (tkinter/turtle) or use the network freely.
  • Packages: the standard library plus Pyodide's prebuilt packages (numpy, pandas, matplotlib, …) load automatically. Others can't be installed here.
  • Run stops after the time limit to catch infinite loops; the sandbox then restarts. Each run starts from a clean state (fresh working folder and modules), though packages stay loaded for speed.