Solving the “Unindent Does Not Match Any Outer Indentation Level” Error
Sometimes, when you are working with Python, you may encounter an error message saying “unindent does not match any outer indentation level.” From the message, you may already get a clear clue that the problem must be related to the indentation of your programming scripts, but what actually causes it? Is it difficult to solve it? How to solve it? Here I will show you the answers to all of those questions.
What Causes This Problem
Problems with indentation are fairly occurring problems when you are programming with Python. Unlike many other programming languages, Python is fairly strict when it comes to regulating the indentation. If you break the rule, the “unindent does not match any outer indentation level” message may appear, noticing you to fix the indentation problem immediately.
What is indentation? An indentation is a white empty space that you add before every line to make the scripts easier to read. Phyton will not have a problem reading your scripts and compiling them even if their lines are not indented; however, you or people who are assessing your scripts will have a problem reading the scripts if all of their lines are aligned flatly on the left margin. Indentation is thus needed more by human than by the compiler.
Normally, you add an indentation before specific lines in your Python scrips using either tabs or spaces. When you press the tap or space button on your computer keyboard, the keypresses will be transformed into white spaces in your text or script editor. On editors that use monospaced texts (most, if not all, script editors do so), the length of a tab is normally eight spaces; however, on some more advanced editors, the tab’s size compared with space might be different from normal. In Notepad++, for example, the default size of a tab is four spaces, though it can be modified depending on your preferences.
For most programmers, tabs are more convenient to use than spaces because the former has the definite size that makes it easier to keep the scrips tidy and discernible. Most programmers use tabs only for indentation purpose. Some use a combination of tabs and spaces when subtle spacing needs to be placed on specific lines. Very few of them use only spaces for indentation purpose.
Now, this is where the problem lies. Unlike most other programming languages, Python requires that the indentations be made uniformly and consistently. If the first indented line in your script uses a tab, you need to use tabs for the rest of the lines. Conversely, if you use a space for indentation purpose, no tab should be present in the remaining part of the script. You either use spaces only or use tabs only. You cannot mix the two indentation methods in your programming script. If you break this rule, the “unindent does not match any outer indentation level” will appear.
How Difficult Is It to Solve?
The difficulty depends mostly on who writes the script. If you write the script yourself, you may be able to edit it with almost no problem, but if you are assessing or evaluating a script that is written by other people, you may need an extra time to discover which parts of the script should be repaired first. Overall, nonetheless, the problem that occurs when the “unindent does not match any outer indentation level” message appears is actually quite easy to fix.
How to Solve the Problem
To solve the problem, you can simply replace all tabs in your script with spaces or vice versa. Although Python, especially Python 3, accepts both tab-only and space-only indentations, the ones using spaces are preferred because they are easier to manage. If you replace all spaces in your script with tabs, there will be some lines that are indented too far to the right due to the disparity in size between tabs and spaces. If you replace all tabs with spaces, the visual “damage” that appears on your script will be less noticeable. In a nutshell, it is recommended that you use spaces only for your script’s indentations.
If your script contains both tabs and spaces, which is the cause why the “unindent does not match any outer indentation level” message appears, convert all tabs into spaces using your editor’s find-and-replace feature. On Notepad, this can be easily done by copying one empty tab and pasting it on the “Find what” text box on the find-and-replace dialog and then pressing the space button once inside the “Replace with” text box. On more advanced editors, such as Python IDLE editor, tabs can be converted into spaces very easily by using Untabify function on the Edit menu.