Home Python IndentationError: Fix Bad Indents, Tabs, and Empty Blocks
Beginner 6 min · September 23, 2026

IndentationError: Fix Bad Indents, Tabs, and Empty Blocks

IndentationError means a line's indent doesn't match its block.

N
Naren Founder & Principal Engineer

20+ years shipping production Python across data and backend systems. Drawn from code that ran under real load.

Follow
Production
production tested
September 23, 2026
last updated
1,905
articles · all by Naren
Before you start⏱ 11 min
  • Python basics: if statements, for loops, and function definitions
  • Running scripts with python3 and reading tracebacks in the terminal
  • A code editor where you can show whitespace and set indent style
 ● Production Incident 🔎 Debug Guide
Quick Answer
  • The fix is local: dedent or indent the flagged line to its block's level, replace tabs with four spaces, and put pass under any empty if, def, or for — then rerun to confirm.
  • Read the caret first: the traceback names the file, line, and column of the exact token the parser rejected, and the cause sits within two lines of it.
  • Reveal invisible characters with cat -A file.py (tabs show as ^I) or python3 -m tabnanny file.py when the line looks fine but still fails.
  • Prevent repeats with .editorconfig declaring spaces plus ruff check and ruff format --check in CI, so mixed indentation fails the build instead of the deploy.
✦ Definition~90s read
What is Python IndentationError Fix?

IndentationError is the SyntaxError subclass Python raises when leading whitespace can't be converted into a coherent block structure. During tokenizing — before any of your code executes — the interpreter translates each line's leading whitespace into INDENT and DEDENT tokens that delimit suites after colon-headers.

Think of a cookbook where sub-steps sit indented under their main step.

A line indented deeper than any open block, a dedent matching no open level, or a header with no suite at all makes that translation impossible, and compilation aborts naming the line. TabError extends IndentationError for the specific case of ambiguous tab-and-space mixing, where the parser refuses to guess which visual column a tab intended.

This is a compile-time failure with total consequences: the module can't import, so every test, worker, and deploy touching that file fails together. Nothing partially runs. That blast radius surprises people — one misaligned line reads like a typo but behaves like a downed service, because the unit of compilation is the whole file.

What it is NOT: it is not a logic error, and fixing it never changes what correct code does — it only restores the structure you meant. It is not a formatter complaint; formatters prevent it, but the error comes from the parser itself. It is not about the number of spaces per level — two, four, or eight all compile if consistent — but about levels agreeing with block structure.

And it is never an execution bug: no data, no state, and no inputs are involved. The file's shape disagreed with its headers, the caret shows exactly where, and the repair is always local to the flagged line and its immediate context.

Plain-English First

Think of a cookbook where sub-steps sit indented under their main step. Python reads your code the same way: indentation says which lines belong to which instruction. An unexpected indent is a sub-step with no parent above it, an empty block is a step with no instructions beneath it, and mixed tabs and spaces are two cooks using different rulers so nothing lines up. The parser stops and points at the confusing line. Align each line under its parent, fill every step, and use one ruler.

You press run and Python refuses before executing a single statement: IndentationError: unexpected indent. Nothing ran, no data changed, no logic was even evaluated — the parser rejected your file's shape. For newcomers this feels personal, as if the language is grading neatness. It isn't. Indentation is Python's grammar for grouping, doing the job braces do elsewhere, so a misaligned line genuinely changes — or destroys — the program's meaning.

This error family fires in a handful of repeatable situations. A line sits deeper than any open block, and the parser can't attach it anywhere. A dedent lands at a level no open block owns. A colon-header like if, def, or for has no body beneath it, leaving the suite empty. Or tabs and spaces mix in one file, and the parser — unable to tell which visual column a tab meant — raises TabError rather than guess.

The good news: every variant points at itself. The traceback carries a caret marking the exact line and column, and the message names the precise complaint. This article teaches you to read that caret, diagnose invisible whitespace with cat -A and tabnanny, fix each variant at the flagged line, and set up editorconfig plus ruff so your team stops shipping these entirely.

Unexpected Indent and Unindent: the Block the Parser Rejected

An unexpected indent means a line stepped right without any open block inviting it in. After a plain statement like x = 1, the parser expects the next line at the same level or a dedent — so a four-space hop on the following line has nowhere to attach, and compilation dies naming that line. The mirror image, an unexpected unindent, means a line stepped left to a level no open block owns: it left its suite but didn't land on any enclosing one. Both are shape errors, and both fire before a single statement runs.

beginners hit the first variant by pasting. A snippet copied from inside a function or a chat window carries its original leading spaces into a context one level shallower, and the pasted lines float right of everything around them. The second variant comes from deleting or misaligning a block header: the body outlives its if or for, and the orphan lines dedent into the void. In both cases the code around the error is innocent — only the flagged line's level disagrees with the structure.

The repair is mechanical. Read the caret's line and column, compare the flagged line's leading whitespace with its siblings, and move it to the level it belongs at. When the line looks correct, suspect the two lines above: a missing colon or an unclosed parenthesis changes what the parser expects, making a rightly-indented line wrong by context. Recompile with py_compile after each nudge; the loop is seconds long and always converges.

unexpected_indent_demo.pyPYTHON
1
2
3
4
5
6
7
8
9
bad = "x = 1\n    y = 2\n"
try:
    compile(bad, "<demo>", "exec")
except IndentationError as exc:
    print(type(exc).__name__ + ":", exc)
    print("line:", exc.lineno, "offset:", exc.offset)

good = "x = 1\ny = 2\n"
print(compile(good, "<demo>", "exec") is not None)
🔥The Caret Is Honest but Sometimes Nearsighted
The caret marks where the parser gave up, which is sometimes the line after the real mistake — a missing colon or an unclosed bracket above shifts everything. Always glance two lines up before re-indenting.
📊 Production Insight
A pasted retry block floated one level right of its function and killed a deploy at import. The caret named the line; dedenting four spaces fixed the release.
🎯 Key Takeaway
A line may only indent under an open block header — compare the flagged line with its siblings and move it home.

Empty Suite After a Colon: if, def, and for Demand a Body

Every compound header demands a suite — at least one statement nested beneath it. When if, for, while, def, class, or with ends with a colon and nothing follows at a deeper level, the parser reports expected an indented block and stops. This isn't Python being fussy about style; a header with no body is structurally incomplete, like a bookshelf bracket with no shelf. The grammar requires the suite the way a sentence requires a verb.

You'll meet this while sketching. You write the if first intending to fill the body after lunch, or you stub three functions and implement one, or a loop's body gets deleted during an edit leaving the header behind. The whole module then refuses to import — not just your function — because compilation is all-or-nothing. One bare header poisons every test in the file, which is why this error often arrives disguised as a mysterious collection failure.

The placeholder is `pass`: a statement that does nothing and compiles to nothing, existing purely to satisfy the suite requirement. Put it under the header with a TODO comment naming the ticket, and the file imports while the work stays visibly pending. When the real body lands, the diff touches one hunk, reviewers see exactly what changed, and no other test ever noticed the gap.

empty_block_pass.pyPYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def todo_later():
    pass

todo_later()
items = []
if items:
    print("has items")
else:
    pass

for i in range(3):
    if i == 1:
        pass
    print(i)
print("ok")
📊 Production Insight
A stubbed webhook handler with an empty body blocked an entire service's test suite at collection. One pass with a ticket number restored 200 tests while the real handler was still unwritten.
🎯 Key Takeaway
No header survives without a suite — stub empty bodies with pass plus a TODO so the module imports.

TabError: the Subclass That Fires on Mixed Tabs and Spaces

TabError is IndentationError's stricter child: it fires when tabs and spaces mix in a file's indentation and the parser can't determine the intended block level. A tab doesn't mean four spaces or eight — it means 'advance to the next tab stop', a width set by your editor, not your code. Two editors rendering the same file can disagree about which block a tab-indented line belongs to, so Python refuses to guess and raises instead. That refusal is a safety feature wearing an error's clothes.

The treacherous part is how innocent mixed files look. In most fonts and review tools, a tab renders at exactly the width that makes the code appear aligned — the diff looks perfect while the bytes contain two different rulers. And there's a worse outcome than the error: when the mixing is consistent enough to tokenize, the file compiles but attaches statements to the wrong block, silently changing behavior with zero visible diff. The crash is the kind outcome; silent misgrouping is the cruel one.

The remedy is uniformity enforced by tools, not eyes. Convert the file to spaces once, turn on render-whitespace so tabs glow on sight, and declare spaces in .editorconfig so every editor agrees. Because TabError subclasses IndentationError, existing except IndentationError handling already covers it — but you should never be catching this in production code. Mixed indentation is a file-construction defect, fixed at the editor and the commit hook, not at runtime.

taberror_subclass_demo.pyPYTHON
1
2
3
4
5
6
mixed = "if True:\n    x = 1\n\tx = 2\n"
try:
    compile(mixed, "<demo>", "exec")
except TabError as exc:
    print(type(exc).__name__ + ":", exc)
    print("TabError is an IndentationError:", isinstance(exc, IndentationError))
📊 Production Insight
A chat-pasted hotfix carried tabs into a spaces file and crash-looped every worker at import. The review diff looked aligned; only the bytes disagreed.
🎯 Key Takeaway
Tabs and spaces are different rulers — convert to spaces-only and let the editor prove it.

Invisible Whitespace: Diagnose Mixed Indents With cat -A

Most indentation bugs are invisible by design: your editor renders tabs, spaces, and even non-breaking spaces as identical gaps. Diagnosis therefore means making the invisible visible. cat -A is the fastest lens — it prints tabs as ^I, marks every line end with $, and exposes non-breaking spaces as M- sequences, so a mixed-indent region shows up as ^I lines sitting among space lines. Pair it with sed -n '40,60p' to frame the neighborhood around the caret's line instead of drowning in a thousand-line dump.

The stdlib offers a second opinion: python3 -m tabnanny walks a file and reports ambiguous indentation without executing anything, which is ideal for pre-commit checks and for sweeping a whole directory after an incident. For the programmatic route, repr() on a line exposes every character honestly — tabs, trailing spaces, and exotic Unicode gaps all appear as escapes — and swapping spaces for dots makes levels countable at a glance.

Build the habit of confirming before editing. Frame the caret line with cat -A, identify the exact intruder character, fix that line, and recompile. The alternative — re-indenting whole regions by feel — usually moves the error to a new line while the original tab sits untouched two lines up. Bytes first, edits second, every time.

whitespace_scan.pyPYTHON
1
2
3
4
5
6
7
8
sample = "def f():\n    x = 1   \n\ty = 2\n"
for lineno, line in enumerate(sample.splitlines(), 1):
    stripped = line.rstrip("\n")
    if "\t" in stripped:
        print(lineno, "has TAB:", repr(stripped))
    if stripped != stripped.rstrip():
        print(lineno, "has trailing whitespace:", repr(stripped))
print("spaces shown with dots:", repr(sample.splitlines()[1]).replace(" ", "."))
📊 Production Insight
An engineer re-indented a whole function three times while the real culprit — one tab two lines above the caret — survived every pass. A ten-second cat -A frame would have ended it.
🎯 Key Takeaway
Don't trust rendered gaps — inspect the bytes with cat -A or repr() before moving anything.

.editorconfig, Ruff, and Black: Prevention That Runs Itself

Prevention beats diagnosis, and for indentation it comes in three layers that reinforce each other. The .editorconfig file declares the contract — indent_style = space, indent_size = 4, trim_trailing_whitespace = true — and every conforming editor enforces it silently as people type. No meetings, no wiki page; the file sits at the repo root and the whole team types identically from the next commit on.

The second layer is the formatter. Ruff's formatter (or Black, if that's your house standard) rewrites layout deterministically, so ruff format on save or on commit erases ragged indentation before review. The third layer is the gate: ruff check --select E,W plus ruff format --check in CI rejects any file that drifted, and a pre-commit hook runs both locally so the failure arrives in seconds on the author's machine instead of minutes into a deploy pipeline.

Teams resist this as bureaucracy until their first whitespace incident, then adopt it in an afternoon. The economics are lopsided: one CI job and one config file against crash-looped workers, rejected payments, and a rollback performed under pressure. Make the build care about whitespace and humans never have to again.

indent_consistency_check.pyPYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import io, tokenize


def check_indent(source):
    stack = []
    for tok in tokenize.generate_tokens(io.StringIO(source).readline):
        if tok.type == tokenize.INDENT:
            stack.append(tok.string)
            if "\t" in tok.string and " " in tok.string:
                return "mixed tabs and spaces on line " + str(tok.start[0])
    if any("\t" in s for s in stack):
        return "tabs used for indentation"
    return "indentation looks consistent"

print(check_indent("def f():\n    return 1\n"))
print(check_indent("def f():\n\treturn 1\n"))
💡Make the Build Care About Whitespace
Formatting gates cost one CI job and save whole incidents. A red ruff format --check names the file and line while the author still has context — the cheapest fix this error family has.
📊 Production Insight
After one tab-driven outage, a team added editorconfig plus ruff gates in an afternoon. Mixed-indent commits dropped to zero and never returned across two years of history.
🎯 Key Takeaway
Editorconfig standardizes typing, the formatter normalizes layout, CI rejects drift — adopt all three.

Caret Reading: the Line and Column the Traceback Flags

The traceback for an indentation failure is unusually generous: it carries the filename, the line number, the offending line's text, and a column offset rendered as a caret. That caret marks the exact token where the parser's expectations broke — the over-indented statement, the dedent that matched nothing, the unindented line where a suite should start. Your first move is always to open that file at that line and compare its leading whitespace with the block it claims to join.

Read the message text alongside the caret. Unexpected indent means the line stepped right with no open header inviting it; expected an indented block means a colon-header above has no suite and the caret sits where the body should begin; unindent does not match any outer level means the dedent skipped past every enclosing block. Each phrase prescribes its repair: dedent the line, add the body, or re-seat the dedent at a real level.

One caution keeps this fast: the caret marks where the parser gave up, which occasionally trails the true cause. A missing colon on the line above, or an unclosed bracket two lines up, shifts the parser's expectations so a correctly indented line reads as wrong. If the flagged line looks flawless, inspect the two lines above it for unclosed syntax before touching anything else. Caret first, context second, edits last.

caret_reading_demo.pyPYTHON
1
2
3
4
5
6
7
8
9
bad2 = "def f():\nprint('oops')\n"
try:
    compile(bad2, "<demo>", "exec")
except IndentationError as exc:
    print(type(exc).__name__ + ":", exc)
    print("file:", exc.filename, "line:", exc.lineno)
    print("offending text:", repr(exc.text))
    print("caret column:", exc.offset)
    print(" " * (exc.offset - 1) + "^")
📊 Production Insight
A developer re-indented a 'wrong' line four times before noticing the missing colon on the line above. Reading the message plus two lines of context would have fixed it on the first attempt.
🎯 Key Takeaway
Open the caret's line, match the message to its repair, and check two lines up when the flagged line looks perfect.
● Production incidentPOST-MORTEMseverity: high

The Tab-Indented Hotfix That Crash-Looped 12 Checkout Workers for 9 Minutes

Symptom
At 11:52 AM during peak checkout, all 12 billing workers began crash-looping simultaneously: start, TabError, exit, restart. The error log's final line was TabError: inconsistent use of tabs and spaces in indentation (billing.py, line 214) — a file touched only by a one-line hotfix merged 20 minutes earlier. Roughly 1,400 payment attempts were rejected over 9 minutes while the team rolled back to the previous release.
Assumption
The team assumed whitespace was cosmetic and therefore safe — CI ran unit tests but no formatter check, and two editors on the team used different indent defaults. Reviewers approved the hotfix because the diff rendered identically on screen: the tab-indented lines aligned perfectly with the space-indented block in every reviewer's font settings. Nobody knew the file now contained two rulers.
Root cause
A hotfix to billing.py was pasted from a chat window carrying tab indentation into a space-indented file, mixing two indent styles in one module. At the next rolling restart, all 12 gunicorn workers failed at import with TabError: inconsistent use of tabs and spaces in indentation on line 214 — the tab-indented retry block the hotfix had added. Because the import failed, every worker exited, the supervisor restarted them, and the restart loop held for 9 minutes during peak checkout, rejecting roughly 1,400 payment attempts before the previous release was rolled back.
Fix
Three changes shipped together. First, the on-call engineer converted billing.py to spaces with the editor's convert-indentation command and re-ran python3 -m py_compile billing.py, confirming a clean compile in under a minute; the 12 workers were restarted and the 9-minute crash-loop ended. Second, an .editorconfig was committed declaring indent_style = space and indent_size = 4 for *.py, and every editor on the team enabled its EditorConfig plugin. Third, CI gained ruff check --select E,W and ruff format --check as merge gates plus a pre-commit hook, so the next mixed-indent commit fails locally in seconds instead of crash-looping 12 workers. A repo-wide grep -rP '\t' sweep converted the 3 other tab-carrying files the same day.
Key lesson
  • Whitespace that renders identically can tokenize differently — review tooling must check bytes, not pixels, which means formatter gates in CI, not eyeballs.
  • A crash at import time has maximum blast radius: one bad file takes all 12 workers, so compile checks belong on every pull request, not just releases.
  • Editor defaults are infrastructure: standardize them in .editorconfig on day one, because two rulers in one repo always ends in an incident.
Production debug guideSix moves that take you from a red caret to a compiling module — with the commands you'd actually run.6 entries
Symptom · 01
Deploy or import fails with IndentationError but the line looks correctly aligned
Fix
Compile without executing: python3 -m py_compile payments/worker.py. The output names the file, line, and column with a caret under the offending token — d = "x" flagged on line 42 means the parser choked exactly there. Fix that line first; the cause is almost always within two lines of the caret, not in the region you suspect.
Symptom · 02
Whitespace looks uniform but TabError or unexpected-indent persists
Fix
Expose invisible characters around the flagged line: cat -A payments/worker.py | sed -n '35,50p'. Tabs show as ^I, line ends as $, and non-breaking spaces as M- sequences. If the flagged line uses ^I while its neighbors use spaces, convert the file with sed -i 's/\t/ /g' (or your editor's convert command) and recompile.
Symptom · 03
You need to find every tab-indented file in a large repository
Fix
Run the stdlib detector over the file: python3 -m tabnanny payments/worker.py. Tabnanny reports ambiguous indentation it finds without running anything. For repo-wide sweeps use grep -rnP '\t' --include='*.py' . to list every file containing a tab, then convert each one and add a formatter so they stay clean.
Symptom · 04
The error appeared after a merge or a teammate's commit
Fix
Check what actually changed before blaming the whole file: git diff --check flags whitespace errors (trailing spaces, tab/space mixing) in the working tree, and git diff -U2 | cat -A | head -40 shows the changed lines with invisible characters visible. If the culprit arrived in the last commit, git log -1 --format=%H plus a revert of that hunk is faster than hand-editing.
Symptom · 05
Mixed-indent files keep slipping through review into production
Fix
Enforce formatting gates so this never deploys again: ruff check --select E,W,TAB payments/ for indentation rules and ruff format --check payments/ for layout drift. Wire both into CI and a pre-commit hook. A red build names the file and line while the author still has context — infinitely cheaper than a worker crash-loop at rollout.
Symptom · 06
You fixed the flagged line and need proof the module is healthy again
Fix
Verify the fix compiles and imports cleanly before pushing: python3 -m py_compile payments/worker.py && python3 -c "import payments.worker; print('import ok')". The compile step catches shape errors; the import step catches anything the header structure broke (like a decorator now attached to the wrong def). Both must pass.
IndentationError Root Causes at a Glance
Root CauseHow to ConfirmFixPrevention
Unexpected indent (over-indented line)python3 -m py_compile names the line; caret sits under the extra indentDedent the line to its block's levelRender whitespace; format on save
Unexpected unindent (dedented too far)Error names the line that broke out of its block earlyRe-indent to match the block it belongs toKeep nesting shallow; extract helpers past 3 levels
Empty body after a colonMessage says expected an indented block right after if/def/for/whileAdd pass or the real body under the headerNever commit a bare header; snippet templates include pass
Mixed tabs and spaces (TabError)cat -A shows ^I beside space runs; message says inconsistent useConvert the file to spaces; fix the flagged line.editorconfig plus ruff format in CI and pre-commit
Invisible trailing/non-breaking whitespacecat -A shows M- sequences or trailing $ with gaps; copy-paste from web/chatRetype the line; paste via editor's paste-as-plain-textStrip trailing whitespace on save; prefer typing over pasting
⚙ Quick Reference
6 commands from this guide
FileCommand / CodePurpose
unexpected_indent_demo.pybad = "x = 1\n y = 2\n"Unexpected Indent and Unindent
empty_block_pass.pydef todo_later():Empty Suite After a Colon
taberror_subclass_demo.pymixed = "if True:\n x = 1\n\tx = 2\n"TabError
whitespace_scan.pysample = "def f():\n x = 1 \n\ty = 2\n"Invisible Whitespace
indent_consistency_check.pydef check_indent(source):.editorconfig, Ruff, and Black
caret_reading_demo.pybad2 = "def f():\nprint('oops')\n"Caret Reading

Key takeaways

1
Indentation is grammar, not style
misaligned lines change block structure or fail compilation.
2
The traceback caret names the exact line and column; fix that line, not the whole region.
3
Every colon header needs a body
use pass under if, def, and for until the real code lands.
4
TabError means mixed tabs and spaces; convert to spaces-only and never mix again.
5
cat -A and tabnanny reveal invisible whitespace your editor hides.
6
.editorconfig plus ruff in CI moves this failure from deploy time to a red local commit.

Common mistakes to avoid

5 patterns
×

Pasting a snippet one level too deep and trusting your eyes

Symptom
IndentationError: unexpected indent on a line that looks perfectly aligned, because the block above it sits one level left of where you pasted.
Fix
Align the flagged line with its siblings and rerun python3 -m py_compile file.py. If the caret points at a line that looks fine, check the line above — a missing colon or parenthesis there shifts the parser's expectations.
×

Leaving an if/def/for body empty while sketching structure

Symptom
expected an indented block the moment you save or import — the file can't even compile, so every test in the module errors, not just yours.
Fix
Put pass under the empty header now, with a TODO comment naming the ticket. When the real body lands, the diff touches exactly one hunk and reviewers see the intent.
×

Mixing tabs and spaces across edits from different editors

Symptom
Code that looks flawless explodes with TabError, or worse, runs but groups statements into the wrong block — behavior changes with zero visible diff.
Fix
Convert the file once with expandtabs or your editor's 'convert indentation to spaces', then enable render-whitespace so tabs glow. Add .editorconfig with indent_style = space so it never recurs.
×

Re-indenting whole regions instead of reading the caret

Symptom
Each 'fix' moves the error to a new line. The file drifts further from correct while the one true culprit — often a single tab two lines up — stays untouched.
Fix
Run cat -A file.py | sed -n '40,60p' around the flagged line and look for ^I (tab) versus spaces. Then fix the exact line the caret names instead of re-indenting the whole neighborhood.
×

Skipping formatter checks in CI because 'it's just whitespace'

Symptom
Mixed-indent files merge cleanly, deploy, and crash workers at import time. The incident review always ends with 'we should have linted this' — so lint it.
Fix
Add ruff check --select E,W and ruff format --check to CI, plus a pre-commit hook that runs them. The red build names the file and line; the author fixes it before review starts.
INTERVIEW PREP · PRACTICE MODE

Interview Questions on This Topic

Q01JUNIOR
Why does Python raise IndentationError instead of just running the code?...
Q02JUNIOR
Why does an empty if or def body need pass?
Q03SENIOR
What is TabError's relationship to IndentationError, and when does each ...
Q04SENIOR
How do you diagnose invisible whitespace with cat -A, tabnanny, and the ...
Q05SENIOR
How do .editorconfig, ruff, and black jointly prevent indentation incide...
Q01 of 05JUNIOR

Why does Python raise IndentationError instead of just running the code?

ANSWER
The tokenizer converts leading whitespace into INDENT and DEDENT tokens that delimit suites after : headers. A line indented deeper than any open block raises unexpected indent; a dedent that matches no open level raises unindent errors; a header with no suite raises expected-indented-block. All variants fire at compile time, before any statement executes.
FAQ · 6 QUESTIONS

Frequently Asked Questions

01
Can I use braces instead of indentation in Python?
02
What is TabError and how is it different from IndentationError?
03
How many spaces should I indent — two, four, or eight?
04
What does pass do and when should I use it?
05
How do I find invisible mixed whitespace in my file?
06
Can mixed tabs and spaces run without raising but do the wrong thing?
N
Naren Founder & Principal Engineer

20+ years shipping production Python across data and backend systems. Drawn from code that ran under real load.

Follow
Verified
production tested
September 23, 2026
last updated
1,905
articles · all by Naren
🔥

That's Errors. Mark it forged?

6 min read · try the examples if you haven't

Previous
Python TypeError NoneType Fix
5 / 11 · Errors
Next
Python UnicodeDecodeError Fix