Indentation error unindent does not match any outer indentation level

When I compile the Python code below, I get IndentationError: unindent does not match any outer indentation level import sys def Factorial(n): # Return factorial result = 1 for i in rang...

When I compile the Python code below, I get

IndentationError: unindent does not match any outer indentation level


import sys

def Factorial(n): # Return factorial
    result = 1
    for i in range (1,n):
        result = result * i
    print "factorial is ",result
    return result

Why?

Martijn Pieters's user avatar

asked Jan 29, 2009 at 16:34

cbrulak's user avatar

7

Other posters are probably correct…there might be spaces mixed in with your tabs. Try doing a search & replace to replace all tabs with a few spaces.

Try this:

import sys

def Factorial(n): # return factorial
    result = 1
    for i in range (1,n):
        result = result * i
    print "factorial is ",result
    return result

print Factorial(10)

Machavity's user avatar

Machavity

30.5k27 gold badges90 silver badges100 bronze badges

answered Jan 29, 2009 at 16:37

Kevin Tighe's user avatar

Kevin TigheKevin Tighe

19.7k4 gold badges35 silver badges36 bronze badges

8

IMPORTANT:
Spaces are the preferred method — see PEP 8 Indentation and Tabs or Spaces?. (Thanks to @Siha for this.)

For Sublime Text users:

Set Sublime Text to use tabs for indentation:
View —> Indentation —> Convert Indentation to Tabs

Uncheck the Indent Using Spaces option as well in the same sub-menu above.
This will immediately resolve this issue.

wjandrea's user avatar

wjandrea

26.2k8 gold badges57 silver badges78 bronze badges

answered May 8, 2014 at 11:44

activatedgeek's user avatar

activatedgeekactivatedgeek

6,3593 gold badges28 silver badges50 bronze badges

6

To easily check for problems with tabs/spaces you can actually do this:

python -m tabnanny yourfile.py

or you can just set up your editor correctly of course :-)

answered Feb 4, 2009 at 21:50

André's user avatar

AndréAndré

12.9k3 gold badges33 silver badges45 bronze badges

3

Are you sure you are not mixing tabs and spaces in your indentation white space? (That will cause that error.)

Note, it is recommended that you don’t use tabs in Python code. See the style guide. You should configure Notepad++ to insert spaces for tabs.

Peter Mortensen's user avatar

answered Jan 29, 2009 at 16:41

zdan's user avatar

zdanzdan

28.2k7 gold badges59 silver badges68 bronze badges

2

Whenever I’ve encountered this error, it’s because I’ve somehow mixed up tabs and spaces in my editor.

answered Jan 29, 2009 at 16:45

Dana's user avatar

DanaDana

31.6k17 gold badges62 silver badges72 bronze badges

0

If you are using Vim, hit escape and then type

gg=G

This auto indents everything and will clear up any spaces you have thrown in.

answered May 7, 2015 at 9:43

cbartondock's user avatar

cbartondockcbartondock

6446 silver badges17 bronze badges

0

If you use Python’s IDLE editor you can do as it suggests in one of similar error messages:

1) select all, e.g. Ctrl + A

2) Go to Format -> Untabify Region

3) Double check your indenting is still correct, save and rerun your program.

I’m using Python 2.5.4

Tshilidzi Mudau's user avatar

answered Jun 13, 2013 at 15:26

Gatica's user avatar

GaticaGatica

5931 gold badge6 silver badges13 bronze badges

0

The line: result = result * i should be indented (it is the body of the for-loop).

Or — you have mixed space and tab characters

answered Jan 29, 2009 at 16:38

Abgan's user avatar

AbganAbgan

3,68022 silver badges31 bronze badges

2

For Spyder users goto
Source > Fix Indentation
to fix the issue immediately

answered Jan 5, 2020 at 16:56

Abdulbasith's user avatar

0

Using Visual studio code

If you are using vs code than, it will convert all mix Indentation to either space or tabs using this simple steps below.

  1. press Ctrl + Shift + p

  2. type indent using spaces

  3. Press Enter

answered Jul 24, 2020 at 8:01

Devil's user avatar

DevilDevil

97211 silver badges17 bronze badges

1

On Atom

go to

Packages > Whitespace > Convert Spaces to Tabs

Then check again your file indentation:

python -m tabnanny yourFile.py

or

>python
>>> help("yourFile.py")

answered Mar 11, 2015 at 14:27

loretoparisi's user avatar

loretoparisiloretoparisi

15.3k11 gold badges98 silver badges138 bronze badges

If you use notepad++, do a «replace» with extended search mode to find t and replace with four spaces.

answered Mar 20, 2014 at 17:23

Jackie Lee's user avatar

Jackie LeeJackie Lee

2393 silver badges3 bronze badges

Looks to be an indentation problem. You don’t have to match curly brackets in Python but you do have to match indentation levels.

The best way to prevent space/tab problems is to display invisible characters within your text editor. This will give you a quick way to prevent and/or resolve indentation-related errors.

Also, injecting copy-pasted code is a common source for this type of problem.

answered Jul 31, 2012 at 20:27

Matt Kahl's user avatar

Matt KahlMatt Kahl

7337 silver badges9 bronze badges

If you use colab, then you can do avoid the error by this commands.

  1. < Ctrl-A >
  2. < Tab >
  3. < Shift-Tab >

It’s all [tab] indentation convert to [space] indentation. Then OK.

answered Nov 25, 2021 at 3:40

WangSung's user avatar

WangSungWangSung

2012 silver badges5 bronze badges

0

Just a addition. I had a similar problem with the both indentations in Notepad++.

  1. Unexcepted indentation
  2. Outer Indentation Level

    Go to —-> Search tab —-> tap on replace —-> hit the radio button Extended below —> Now replace t with four spaces

    Go to —-> Search tab —-> tap on replace —-> hit the radio button Extended below —> Now replace n with nothing

answered Nov 12, 2015 at 21:42

I was using Jupyter notebook and tried almost all of the above solutions (adapting to my scenario) to no use. I then went line by line, deleted all spaces for each line and replaced with tab. That solved the issue.

answered Dec 15, 2018 at 4:48

Cur123's user avatar

Cur123Cur123

911 silver badge8 bronze badges

For what its worth, my docstring was indented too much and this also throws the same error

class junk: 
     """docstring is indented too much""" 
    def fun(): return   

IndentationError: unindent does not match any outer indentation level

answered Mar 5, 2019 at 23:00

plfrick's user avatar

plfrickplfrick

1,05912 silver badges12 bronze badges

1

I’m using Sublime text in Ubuntu OS. To fix this issue go to

view -> Indentation -> convert indentation to tabs

Dharman's user avatar

Dharman

29.3k21 gold badges80 silver badges131 bronze badges

answered Mar 3, 2021 at 10:28

Rahal Kanishka's user avatar

It could be because the function above it is not indented the same way.
i.e.

class a:
    def blah:
      print("Hello world")
    def blah1:
      print("Hello world")

answered Feb 14, 2014 at 2:52

Ali's user avatar

0

Since I realize there’s no answer specific to spyder,I’ll add one:
Basically, carefully look at your if statement and make sure all if, elif and else have the same spacing that is they’re in the same line at the start like so:

def your_choice(answer):
    if answer>5:
        print("You're overaged")
    elif answer<=5 and answer>1: 
            print("Welcome to the toddler's club!")
    else:
            print("No worries mate!")

answered Dec 7, 2018 at 13:42

NelsonGon's user avatar

NelsonGonNelsonGon

12.9k6 gold badges27 silver badges57 bronze badges

0

I am using Sublime Text 3 with a Flask project. I fixed the error using View > Indentation > Tab Width: 4 after unselected Indent Using Spaces

answered Jun 30, 2020 at 15:52

bmc's user avatar

bmcbmc

8171 gold badge12 silver badges20 bronze badges

This is because there is a mix-up of both tabs and spaces.
You can either remove all the spaces and replace them with tabs.

Or,
Try writing this:

#!/usr/bin/python -tt

at the beginning of the code. This line resolves any differences between tabs and spaces.

answered Mar 5, 2014 at 13:43

Eragon's user avatar

I had the same issue yesterday, it was indentation error, was using sublime text editor. took my hours trying to fix it and at the end I ended up copying the code into VI text editor and it just worked fine. ps python is too whitespace sensitive, make sure not to mix space and tab.

answered Jun 26, 2014 at 15:57

user3731311's user avatar

0

for Atom Users, Packages ->whitspace -> remove trailing whitespaces
this worked for me

answered Jul 28, 2015 at 12:41

Aha's user avatar

I had a function defined, but it did not had any content apart from its function comments…

def foo(bar):
    # Some awesome temporary comment.
    # But there is actually nothing in the function!
    # D'Oh!

It yelled :

  File "foobar.py", line 69

                                ^
IndentationError: expected an indented block

(note that the line the ^ mark points to is empty)

Multiple solutions:

1: Just comment out the function

2: Add function comment

def foo(bar):
    '' Some awesome comment. This comment could be just one space.''

3: Add line that does nothing

def foo(bar):
    0

In any case, make sure to make it obvious why it is an empty function — for yourself, or for your peers that will use your code

answered Dec 10, 2018 at 14:07

Cedric's user avatar

CedricCedric

5,02511 gold badges40 silver badges59 bronze badges

1

Firstly, just to remind you there is a logical error you better keep result=1 or else your output will be result=0 even after the loop runs.

Secondly you can write it like this:

import sys

def Factorial(n): # Return factorial
  result = 0
  for i in range (1,n):
     result = result * i

  print "factorial is ",result
  return result

Leaving a line will tell the python shell that the FOR statements have ended. If you have experience using the python shell then you can understand why we have to leave a line.

answered Dec 25, 2018 at 11:49

Faisal Ahmed Farooq's user avatar

For example:

1. def convert_distance(miles):
2.   km = miles * 1.6
3.   return km

In this code same situation occurred for me. Just delete the previous indent spaces of
line 2 and 3, and then either use tab or space. Never use both. Give proper indentation while writing code in python.
For Spyder goto Source > Fix Indentation. Same goes to VC Code and sublime text or any other editor. Fix the indentation.

answered Apr 11, 2020 at 6:48

Ayush Aryan's user avatar

Ayush AryanAyush Aryan

1913 silver badges4 bronze badges

I got this error even though I didn’t have any tabs in my code, and the reason was there was a superfluous closing parenthesis somewhere in my code. I should have figured this out earlier because it was messing up spaces before and after some equal signs… If you find anything off even after running Reformat code in your IDE (or manually running autopep8), make sure all your parentheses match, starting backwards from the weird spaces before/after the first equals sign.

answered Jul 24, 2020 at 7:52

Bartleby's user avatar

BartlebyBartleby

9551 gold badge12 silver badges14 bronze badges

I had the same error because of another thing, it was not about tabs vs. spaces. I had the first if slightly more indented than an else: much further down. If it is just about a space or two, you might oversee it after a long code block. Same thing with docstrings:

"""comment comment 
comment
"""

They also need to be aligned, see the other answer on the same page here.

Reproducible with a few lines:

if a==1:
    print('test')
 else:
    print('test2')

Throws:

  File "<ipython-input-127-52bbac35ad7d>", line 3
    else:
         ^
IndentationError: unindent does not match any outer indentation level

answered Oct 1, 2021 at 14:19

questionto42's user avatar

questionto42questionto42

5,7513 gold badges44 silver badges73 bronze badges

I actually get this in pylint from a bracket in the wrong place.

I’m adding this answer because I sent a lot of time looking for tabs.
In this case, it has nothing to do with tabs or spaces.

    def some_instance_function(self):

        json_response = self.some_other_function()

        def compare_result(json_str, variable):
            """
            Sub function for comparison
            """
            json_value = self.json_response.get(json_str, f"{json_str} not found")

            if str(json_value) != str(variable):
                logging.error("Error message: %s, %s", 
                    json_value,
                    variable) # <-- Putting the bracket here causes the error below
                    #) <-- Moving the bracket here fixes the issue
                return False
            return True

        logging.debug("Response: %s", self.json_response)
        #        ^----The pylint error reports here 

answered Oct 11, 2022 at 10:13

SpiRail's user avatar

SpiRailSpiRail

1,36719 silver badges28 bronze badges

1

I just can’t figure out what’s wrong with this…

#!/usr/bin/env python
#
#       Bugs.py
#       

from __future__ import division

# No Module!
if __name__ != '__main__': 
    print "Bugs.py is not meant to be a module"
    exit()

# App
import pygame, sys, random, math
pygame.init()

# Configuration Vars
conf = {
    "start_energy": 50, 
    "food_energy": 25, 
    "mate_minenergy": 50, 
    "mate_useenergy": 35, 
    "lifespan": 300000
}

class Bugs:
    def __init__(self):
        self.list  = []
        self.timers= {}
        # Names / colors for sexes
        self.sex = ["Male", "Female"]
        self.color = ["#CBCB25", "#A52A2A"]
        # Bug info tracking
        self.bugid = 0
        self.buginfo = {"maxgen":0, "maxspeed":0}

    def new(self, x=False, y=False, sex=2, speed=0, generation=0, genes=[]):
        sex   = sex   if not sex   == 2 else random.randint(0,1)
        speed = speed if not speed == 0 else random.randint(1,3)
        # Create new bug object
        self.bugs.append(BugObj(sex, speed, generation, bugid, pygame.time.get_ticks, genes))
        # Make sure it has a timer
        if not self.timers[speed]:
            self.timers[speed] = 1
            pygame.time.set_timer(25 + speed, 1000 / speed)
        # Update info tracking variables
        if speed      > self.buginfo["maxspeed"]: self.buginfo["maxspeed"] = speed
        if generation > self.buginfo["maxgen"]  : self.buginfo["maxgen"]   = generation
        self.bugid += 1

    def speed_count(self, speed):
        a = 0
        for i in list[:]:
            if i.speed = speed:
                a += 1
        return a

class BugObj:
    def __init__(self, sex, speed, generation, bugid, born, genes):
        global conf
        self.sex        = sex
        self.speed      = speed
        self.generation = generation
        self.id         = bugid
        self.born       = born
        self.genes      = genes
        self.died       = -1
        self.energy     = conf["start_energy"]
        self.target     = "None"

    def update(self):
        global conf
        if self.age() > conf["lifespan"]:
            self.die()
        else:
            f = closest_food()
            m = closest_mate()
            # If there's a potential mate
            if m != 0 and self.energy > conf["mate_minenergy"]:
                if not self.rect.colliderect(m.rect):
                    self.move_toward(m)
                    self.target = "Mate: " + str(m.rect.center)
                else:
                    Bugs.mate(self, m)
                    self.target = "Mate: (Reached)"
            elif f != 0:
                if not self.rect.colliderect(f.rect):
                    self.move_toward(f)
                    self.target = "Food: " + str(f.rect.center)
                else:
                    self.eat(f)
                    self.target = "Food: (Reached)"
            else:
                self.target = "Resting"
            # Use energy
            self.energy -= 0

    def closest_food(self):
        pass

    def closest_mate(self):
        pass

    def age(self):
        if self.died != -1:
            return pygame.time.get_ticks - self.born
        else:
            return self.died - self.born

    def die(self):
        # Remove self from the list
        Bugs.list.remove(self)
        # Turn off timer
        if not Bugs.speed_count(self.speed):
            Bugs.timers[self.speed] = 0
            pygame.time.timers(25 + self.speed, 0)
        # Bye!
        del self

class Food:
    def __init__(self)
        pass

    def update(self)
        pass

# Update Loop
while 1:
    ev = pygame.event.wait()
    speed = ev.type - 25
    if speed > 24:
        for i in Bugs.list[:]:
            if i.speed = speed
                i.update()
                print "Updating bug #" + str(i.id)
    if speed == 0:
        Food.update()

I get the following every time:

  File "Bugs.py" line 53
    def new(self, x=False, y=False, sex=2, speed=0, generation=0, genes=[]):
                                                                           ^
Indentation Error: unindent does not match any outer indentation level

Python uses indentation to define the scope and extent of code blocks in constructs like class, function, conditional statements and loops. You can use both spaces and tabs to indent your code, and if you use both methods when writing your code, you will raise the error: IndentationError: unindent does not match any outer indentation level.

We will go through the error in detail and an example to learn how to solve it.


Table of contents

  • IndentationError: unindent does not match any outer indentation level
    • What is Indentation in Python?
  • Example: Mixing Indentation in Function
    • Solution
  • Summary

IndentationError: unindent does not match any outer indentation level

What is Indentation in Python?

Indentation is vital for constructing programs in Python. It refers to the correct use of white space to start a code block. With indentations, we can quickly identify the beginning and endpoint of any code block in our program. Let’s look at how indentation in Python works visually:

code indentation in Python
Code indentation in Python

To indicate a code block in Python, you must indent each block line by the same amount. You can use four spaces or one tab, a typical indentation for Python. According to the conventions in PEP 8, four white spaces is preferable. You can use indentation to nest code blocks within code blocks.

Python objects if you use both spaces and tabs to indent your code. You need to use one form of indentation, and this can be tricky because you cannot see the difference between spaces and tabs.

The error commonly occurs when you copy code from other sources to your script. The code you are copying may have a different indentation to what you are using.

The error can also occur if you have used indentation in the wrong place or have not used any indentation.

Example: Mixing Indentation in Function

Let’s write a program that calculates the square roots of a list of numbers and prints the result to the console. We will start by defining the function to calculate the square root of a number:

def get_square_roots(number_list):

    for number in number_list:

        sqrt_number = number ** 0.5

	    print(f'The square root of {number} is {sqrt_number}')

The function uses a for loop to iterate through every number in the list you will pass. We use the exponentiation operator to calculate the square root of the number and then print the result. Next, we will define the list of numbers and then call the get_square_roots() function.

number_list = [4, 9, 16, 25, 36]

get_square_roots(number_list)

Let’s run the code and see what happens:

sqrt_number = number ** 0.5
                          ^
IndentationError: unindent does not match any outer indentation level

The code returns the IndentationError, and the tick indicates the line responsible for the error.

Solution

We can use a text editor like Sublime Text to see the indentation style in our code by highlighting it, as shown below.

Code block with mixed indentation style
Code block with mixed indentation style

Each line represents a tab, and a dot represents a space. We can see a mix of spaces and tabs in the code snippet, particularly the line sqrt_number = number ** 0.5. To fix this, you can change replace the indentation on the other lines with four white spaces as this is the preferred indentation method. Alternatively, you can use tabs. Let’s look at the revised code in the text editor:

Code block with consistent indentation style
Code block with consistent indentation style

We can see each line has spaces instead of tabs. Let’s run the code to see what happens:

The square root of 4 is 2.0
The square root of 9 is 3.0
The square root of 16 is 4.0
The square root of 25 is 5.0
The square root of 36 is 6.0

The program returns the square root of each number in the list we pass to the function. You do not need to use a text editor to find differences in indentation style, but it does make it easier to spot them. Alternatively, you can manually go through each line in your code and stick to one indentation style.

Summary

Congratulations on reading to the end of this tutorial! The error “indentationerror: unindent does not match any outer indentation level” occurs when you mix spaces and tabs to indent your code. To solve this error, ensure all your code uses either spaces or tabs in your program. You can use a text editor to highlight your code to make it easier to spot the differences. Otherwise, you can go over the lines in your code and stick to one indentation style. To minimise the likelihood of this error, you can write your code in a text editor or Integrated Development Environment (IDE) like PyCharm, which automatically indent your code in a consistent style.

For further reading on Python code structure, go to the article: How to Solve Python UnboundLocalError: local variable referenced before assignment.

Go to the online courses page on Python to learn more about Python for data science and machine learning.

Have fun and happy researching!

Indentation is important for making your code look well-structured and clean. This will help you to separate the code into multiple blocks and make it more readable. In languages such as C or C++, curly braces {} are used.

Improper indentation in Python raises an error called “unindent does not match any outer indentation level”. In this post, we will figure out the ways to solve this problem.

But first, let us learn about indentation in Python.      

What is Indentation in Python?

In Python, indentation is the space or tab that programmers put at the beginning of every line. In Python, whitespace is used for indenting the code. Code is indented from left to right.

In python, we don’t use indention just for the beautification of code or to make the code look pretty. When you do indent using one space or two space for the first line, it must be same for the rest of the lines. 

In the picture shown below, you can see there are three blocks of code, and each block code has an identical indentation. 

What is Indentation

What is ‘IndentationError: unindent does not match any outer indentation level’?

This type of error occurs when we assign extra indent to an identical code block. Due to this additional indent, the python compiler is not able to recognize similar code blocks, and it throws an error. To fix this, you have to make sure all blocks of similar code have the same indentation.

IndentationError: Unindent does not match any outer indentation level

Let us look at some examples to understand the error and its solution.

Example:

a = int(input("Please enter an integer A: "))
b = int(input("Please enter an integer B: "))
if b > a:
        print("B is greater than A")
elif a == b:
        print("A and B are equal")
    else:
        print("A is greater than B"

Output:

File "t.py", line 7
    else:
        ^
IndentationError: unindent does not match any outer indentation level

In the above code example “if” and “elif” statements are assigned with no indent whereas “else” statement (see line no 7) which is belong to “if” statement, assigned with an extra indent. Due to an additional indent python compiler was not able to recognize “else” statement (line no 7) and throw the indentation error ’unindent does not match any outer indentation level’.

Correct Code:

a = int(input("Please enter an integer A: "))
b = int(input("Please enter an integer B: "))
if b > a:
        print("B is greater than A")
elif a == b:
        print("A and B are equal")
else:
        print("A is greater than B")

Therefore, before compiling the code, check the overall indentation to avoid the “unindent does not match any outer indentation level” error. 

Indenting your code can be a messy business if you try to use both spaces and tabs. In Python, using both methods of indentation results in an error. This error is “indentationerror: unindent does not match any outer indentation level”.

In this guide, we talk about what this error means and when it is raised. We walk through an example of this error in action to help you learn how to fix it.

Get offers and scholarships from top coding schools illustration

Find Your Bootcamp Match

  • Career Karma matches you with top tech bootcamps
  • Access exclusive scholarships and prep courses

Select your interest

First name

Last name

Email

Phone number

By continuing you agree to our Terms of Service and Privacy Policy, and you consent to receive offers and opportunities from Career Karma by telephone, text message, and email.

indentationerror: unindent does not match any outer indentation level

Python code can be indented with tabs or spaces. It’s up to you.

Python only has an objection when you use both spaces and tabs to indent your code. Python requires you use only one method of indentation. This is because the language is statically typed. Statically typed programming languages are sticklers when it comes to syntax. 

Indentation errors are a difficult one to understand because it involves the invisible: mixing spaces and tabs. Depending on the code editor you are using, you may not even be able to see whether spaces or tabs have been used until you delete your indents from your code.

IndentationErrors are common when you copy code snippets from the internet. Every developer has their own preference when it comes to indentation and you’ll often find code snippets do not adhere to your own preferences. Some snippets will indent with spaces.

If a code snippet you copy into your program uses a different type of indentation, you may see an IndentationError in your code. This is because you mix tabs and spaces.

An Example Scenario

Write a program that finds the factors of a number.

Start by defining a function to calculate the factors of a number:

def get_factors(number):
	for i in range(1, number + 1):
		if number % i == 0:
			print("{} is a factor of {}.".format(i, number))

This function uses a for loop to iterate through every number in the range of 1 and the number we have specified plus 1.

In each iteration, our program checks if there is a remainder after dividing “number” by “i”. We do this using the modulo operator. If there is not a remainder, “i” is a factor of “number”.

If a number is a factor of “number”, a message is printed to the console.

We to call our function:

This code calculates all the factors of 32. Run our code and see what happens:

  File "test.py", line 4
	print("{} is a factor of {}.".format(i, number))
                                               	^
IndentationError: unindent does not match any outer indentation level

Our code returns an IndentationError.

The Solution

We have made a mistake with the styling of our code. We know this because IndentationErrors are raised when there is a problem with how your code is indented.

Take a look at how our code is styled. In Sublime Text, we can see the styles of our code by hovering over each line:

ZkT2zfCE1h22 Ldf RwNqSrZL9fUBLG VdcBcqh559l QY6dDanxnhIiihRf52m10qUKnPgFyT2uG6YxVF5MoRzAVitrOwbnF 04EUYhdD3dMZZXkO3aOERWcZYtYsJpOFu1rqun

Each line represents a tab. Each dot represents a space. You can see that we have mixed up both spaces and tabs in our code snippet. Python likes consistency in indents and so the interpreter returns an error when we run our code.

If you use a text editor that does not support this behavior, check whether your code uses spaces or tabs by backspacing your indentation. If your code removes a tab when you press the backspace key, that part of your code is using tabs.

Spaces are the preferred method of indentation in Python but you can use tabs if you want.

Let’s revise our code:

def get_factors(number):
		for i in range(1, number + 1):
				if number % i == 0:
						print("{} is a factor of {}.".format(i, number))

We have replaced all the spaces with tabs. Run our program again:

1 is a factor of 32.
2 is a factor of 32.
4 is a factor of 32.
8 is a factor of 32.
16 is a factor of 32.
32 is a factor of 32.

Our code successfully returns a list of all the factors of 32. This shows us that our code was logically accurate all along. It was our indentation that caused the problem.

Conclusion

The “indentationerror: unindent does not match any outer indentation level” error is raised when you use both spaces and tabs to indent your code.

To solve this error, check to make sure that all your code uses either spaces or tabs in a program. Now you’re ready to resolve this common Python error like a professional software developer!

Table Of Contents

  • Understanding Python Indentation
  • How To Prevent The Indentation Error From Occuring?
  • How To Fix It?
    • Fix 1
      • Video Guide: Sublime Text Line and Indentation Tools
    • Fix 2
    • Fix 3
    • Fix 4
    • Fix 5
      • Video Guide: How To Indent HTML Tags In Notepad++
    • Fix 5
  • Forum Feedback
  • Summing Up
    • Related Posts:

In this post, we’ll provide 5+ fixes for the frustrating Indentation Error: unindent does not match any outer indentation level error.

One of the common errors in programming is the indentation error. It happens when unindent does not match any outer indentation level, but what is this error all about and how to fix it? Before we define what indentation is and why this error occurs, let us identify how programs work.

Each computer program has its own coding style guidelines. In programming, there is a set of standards used in writing the source code for a specific computer program. They are known as the code lay-out or the programming style. It helps the programmers read and understand a particular source code whose function is to prevent initiating errors.

And this error can really piss people off

WHAT THE ACTUAL F IT SHOULD WORK BUT NOOOO

«compile error: unindent does not match any outer indentation level»

AYOKO NA

— solanaceae (@lc_potato) September 27, 2017

In programming, code lay-out is designed for a specific programming language.

Programming languages are letters taken from the alphabet that is formed in accordance with a particular set of rules. This is where indentation comes in. Programming languages use indentation to determine the limits of logical blocks of code. If codes are indented, codes are more eye-friendly. In other words, they will be readable. On the other hand, the indentation in Python is required to indicate which blocks of code a statement belongs to.

Indentation uses four spaces per indentation level. This is where indentation error usually takes place. This is where unindent does not match any outer indentation level. Mixing spaces with tabs is what causes the error.

Also, other factors that affect the alignment of the elements may cause the system to respond differently. There are guidelines, fixes, and preventive measures for this issue below.

But first- check out some more reaction from social media regarding this annoying error: 

It also gives you a diagnostic error right when you run the code:

IndentationError: unindent does not match any outer indentation level.

— 🖥️🏳️‍🌈unsafe fn bot() ➡️ impl CRJ Shitposting (@KardOnIce) November 27, 2018

The most frustrating error for me in Python/ Spyder is «unindent does not match any outer indentation level». tab, space still not working….. I hate the error with passion #python #100DaysOfMLCode #ai #MachineLearning

— Oladeji Stephen (@RealSaintSteven) October 9, 2018

Understanding Python Indentation

The ICMEStudio YouTube channel shot a popular video clarifying how indentation works in Python:

How To Prevent The Indentation Error From Occuring?

The guidelines below are just the basic steps to follow in preventing indentation error occurs.

  • First, it is important to align the codes with an opening delimiter. By using Python’s implicit line linking inside brackets, braces, and parentheses, these continuation lines should align wrapped elements vertically. A hanging indent can be used as well.

Note: In using a hanging indent, no arguments must be placed on the very first line. Also, to clearly differentiate the continuation line, an additional indentation must be used.

  • Add four spaces to determine arguments from the rest. This will be considered as an extra level of indentation.
  • Add an additional indentation level for hanging indents.

Note: Remember that the 4-space rule is nonmandatory for hanging indents.

How To Fix It?

The number of indentation always matters. Having a missing or extra space could cause an unexpected behavior that we consider the error. Within the similar block of code, statements should be intended at the same indentation level. So, here are preferred methods to fix the error.

Fix 1

For those who use Sublime Text as their source code editor, follow these steps:

  1. Set Sublime Text to use tabs for indentation.
  • Go to view
  • Choose indentation
  • Convert Indentation to Tabs.
  1. Go to the sub-menu and look for the ‘Indent Using Spaces’ option and uncheck it.

This will automatically resolve the issue.

Note: Injecting copy-pasted code could be a source of the problem. So, avoid doing it. Space and tab problems can be prevented if you will display invisible characters within your text editor. It will quickly resolve indentation-related errors.

Also, you can avoid the issue by using the package Anaconda. Try following these steps:

  1. Install Anaconda.
  2. Open your sublime file.
  3. Look for ‘Open Spaces’ and right click.
  4. Choose Anaconda.
  5. Click on auto format.
  6. Click Done or Press CTRL+ALT+R

Video Guide: Sublime Text Line and Indentation Tools

Fix 2

For Python’s IDLE editor users, follow the steps below, if it suggests one similar message:

1) Choose All, e.g. Ctrl + A

2) Select Format -> Untabify Region

3) Double check if your indenting is still correct, then save and rerun the program.

This works well for Python 2.5.4 and Python 3.4.2

Note: Make sure not to mix space with the tab because Python is whitespace sensitive.

Fix 3

For Vim users, follow these steps and it will indent everything. It will also clear up any space you threw in.

  1. Hit escape.
  2. Type gg=G

Fix 4

For ATOM users, you can do these steps to resolve the error:

  1. Go to Packages.
  2. Choose Whitespace.
  3. Convert Spaces to Tabs.
  4. Check your file indentation:

python -m tabnanny yourFile.py

or

>python

>>> help(“yourFile.py”)

And here’s another way to resolve the issue. This method also works for ATOM users.

  1. Go to Packages.
  2. Choose Whitespace.
  3. Remove trailing whitespaces.

Fix 5

For indentation-related issues in Notepad++, you can fix the problem by doing this:

  • For unexpected indentation:
  1. Go to the Search tab.
  2. Tap on replacing.
  3. Hit the radio button EXTENDED below.
  4. Replace t with four spaces.
  • For Outer indentation Level:
  1. Go to.
  2. Search tab.
  3. Tap on replacing.
  4. Hit the radio button EXTENDED below.
  5. Replace n with nothing.

Video Guide: How To Indent HTML Tags In Notepad++

Fix 5

For Spyder users, look carefully at your ‘if statement’ and make sure that all if, elif and else statements have exactly the same spacing as if they are in the same line.

Use the reference below:

def your_choice(answer):

if answer>5:

print(“You’re overaged”)

elif answer<=5 and answer>1:

print(“Welcome to the toddler’s club!”)

else:

print(“No worries mate!”)

Forum Feedback

To understand more about IndentationError: unindent does not match any outer indentation level, we search through several Python message boards and support forums.

python IndentationError unindent does not match any outer indentation level

In general, users wanted information about IndentationError: unindent does not match any outer indentation level Vim/ ATOM/Jupyter/Notepad C++. They also wanted to know about how to handle IndentationError: unindent does not match any outer indentation level in Django and Pycharm.

A Python novice shared that he completed his code, and he was certain that he has programmed it correctly.

  • However, he was getting an error that he didn’t know the meaning of.
  • It said, “IndentationError: unindent does not match any outer indentation level.”
  • So, he reached to the programming community for advice.
  • They said that the most probable cause for such an error would be that he had mixed tabs with spaces which resulted in the wrong indentation.
  • What they recommend was to search for tabs and then replaces the tabs with spaces.

Another user also ran into the same error. Following advice from other Python programmers, he looked at what tabs and spaces he had used. He discovered that his first line was spaced, but he had used tabs for the rest of the code. He was surprised by that because he didn’t know that tabs and spaces mattered in Python.

An individual remarked that it could be tricky to remember how to use tabs and space properly in Python. That’s why he recommended that you use the right text redactor to edit your Python code and mentioned that you could configure it to replace tabs with spaces so that you could avoid IndentationError: unindent does not match any outer indentation level errors.

python 3.4 3 unindent does not match any outer indentation level error http://t.co/vkXNJs9fb8 http://t.co/SgsIGGpwz7 #Python via @dv_geek

— Python Questions (@Python_Quest) June 25, 2015

Another poster also mentioned that spaces are preferred in Python and that you can employ SublimeText because it shows spaces as dots. In this way, you can quickly find out where you’ve used tabs and fix it on the spot.

A poster explains that if you have used a tab somewhere instead of a space, you can change it quickly in Sublime. Simply go to View –> Indentation –> Convert Indentation to Tabs. He also recommends that you uncheck “Indent Using Spaces” in the same menu so that you don’t make an accidental mistake.

A Python user says that if you’re using ATOM, you also have the option to convert tabs to spaces when you get the indentation error. He explains that you must click on Packages > Whitespace > Convert Spaces to Tabs, and you’re ready to go.

Another forum member comments when you get IndentationError: unindent does not match any outer indentation level errors you can check for problems using “python -m tabnanny yourfile.py”. However, several users who have tried that solution said that they didn’t get any output and one poster complained that it showed an error in the wrong line.

my first python error…. IndentationError: unindent does not match any outer indentation level

— Hruhiko Soma (@harupiko) September 6, 2007

A Python expert explains that it’s true that spaces are preferred according to the Python style guide. However, as long as you use only spaces or only tabs you shouldn’t get indentation errors, but using both will cause a conflict.

Another user explains that besides mixing tabs and spaces in code, other sources of indentation problem will arise if you copy and paste code lines. He also suggests that you always display invisible characters like spaces/tabs in your editor so that you can spot a mismatch.

A forum commentator shares that his problem with IndentationError: unindent does not match any outer indentation level came from an incorrect configuration of PyDeck. That’s why he advises that you check the settings to make sure that they are the correct one. He observes that Python is very strict with how you should structure your code and that you should read the style guide again if you’re not sure which rules apply to Python.

Another poster states that you should rely on a good Python IDE if you’re serious about programming. He points about that an IDE can identify and highlight wrong indentations so that you don’t have to wonder what’s wrong with the code.

A beginner programmer said that he followed the advice of fellow Python users and that he replaced tabs with spaces. However, he still kept getting the same indentation error. It turned out that his indentation wasn’t consistent. He didn’t know that he should stick to four spaces per level of indentation, which is the recommended number.

Summing Up

Coding is a crucial and sensitive task. This is why programmers need to be extra careful in inserting program languages. In resolving issues like the indentation error, different approaches could be used to resolve the problem.

Also, there are things you need to know ahead. First, check the source code editor you are using because different procedure applies. Follow the correct settings and know the possible causes that may trigger the system to behave differently.

Also, you can rely on forums online and video tutorials since people around the world encounter the same issues as yours and might be able to share how they resolve it their way. Be knowledgeable and resourceful enough to gather more information as solutions may vary because of the system compatibility.

And lastly, don’t hesitate to share what works for you because it could also save someone on the other side.

Ryan is a computer enthusiast who has a knack for fixing difficult and technical software problems. Whether you’re having issues with Windows, Safari, Chrome or even an HP printer, Ryan helps out by figuring out easy solutions to common error codes.

Table of Contents

  • ✨ Indentation in Python
    • ◈ Example 1
    • ◈ Example 2
  • ✨ Avoid or Fix IndentationError In Code Editors
    • ➥ Sublime Text
    • ➥ Notepad++
    • ➥ Using an IDE
  • ✨ Practice Exercise
  • Conclusion

IndentationError: unindent does not match any outer indentation level

You must have come across this stupid bug at some point of time while coding. Isn’t it frustrating to get an error even if your code is logically correct!
But after you read this article, you will probably never come across this error again. Even if you do, you will be able to rectify it in a flash! So without further delay, let us dive into our discussion on IndentationError in Python.

Indentation in Python

Indentation refers to the spaces at the beginning of a line of code.

In other programming languages like Java, indentation serves the purpose of readability. Even if you do not follow the proper indentation in such languages, it won’t hamper your code’s execution since they use braces {} to represent a block of code.

In Python indentation is an integral feature that represents a block of code and determines the execution of your code. When you skip proper indentation, Python will throw an IndentationError.

Each line of code within a block should have an equal number of whitespaces before them. If a for loop block contains two lines of code, then each line should have four whitespaces (ideally) before them. If one line of code has three whitespaces while the other has four, you will again get an IndentationError.

Example 1

Here’s the code:

for i in range(1,6):

    if i%2==0:

     print(i,‘ is even’)

else:

     print(i,» is odd»)

Output:

   File «D:/PycharmProjects/pythonProject1/IndentationError.py», line 4

    else:

        ^

IndentationError: unindent does not match any outer indentation level

Process finished with exit code 1

Solution:

To fix the IndentationError: expected an indented block use the same number of whitespaces for each line of code in a given block.

for i in range(1, 6):

    if i % 2 == 0:

        print(i, ‘ is even’)

    else:

        print(i, » is odd»)

Output:

1  is odd

2  is even

3  is odd

4  is even

5  is odd

✍️ Note:

  • Generally, you should use four whitespaces for indentation and are preferred over tabs.
  • You can ignore indentation in line continuation, but it’s always recommended to indent your code for better readability.
    • For example: if True :print("Welcome To Java2Blog!")

Let’s discuss another example to clarify things further.

◈ Example 2

Consider the following program given below:

age = 25

if age<18:

    print(‘You cannot Vote!’)

else:

    print(‘You can Vote!’)

Output:

File «<tokenize>», line 4

    else:

    ^

IndentationError: unindent does not match any outer indentation level

Explanation:

The above error occurred because line 4 , which represents the else block, has an improper indentation. It happened because we mixed TAB and spaces in our code to indent the if-else blocks.

Solution:

Either use TAB or 4 whitespaces (recommended) for both statements (if-else)

age = 25

if age<18:

    print(‘You cannot Vote!’)

else:

    print(‘You can Vote!’)

# Output: You can Vote!

Avoid or Fix IndentationError In Code Editors

The primary reason behind IndentationError in Python is the improper use of whitespaces and tabs in your program. In most code editors you can fix the number of whitespace characters/ tabs by setting the indentation levels.

Let us have a look at the settings in various code editors that allow us to auto-indent our code or fix the pre-existing errors :

➥ Sublime Text

  1. Click in View.
  2. Select Indentation.
  3. Select Indentation to tabs.
  4. Uncheck the Indent Using Spaces option in the sub-menu above.

➥ Notepad++

Follow the settings given below to view the tabs or whitespaces in Notepad++.

  1. Click on View
  2. Select Show Symbol
  3. Make sure that Show Whitespace and TAB and Show Indent Guide options are checked.

➥ Using an IDE

The advantage of using an IDE like PyCharm is that you do not have to worry about indentations in your code manually. It is taken care of by the IDE itself, as shown in the presentation given below.

Practice Exercise

Let’s test your knowledge with an exercise. Find the error in the following code and rectify it.

for i in range(6):

    for j in range(i):

        print(‘*’,end=«»)

print()

Expected Output:

*
**
***
****
*****

Hint: last line in the code looks fishy! 🕵️

Solution:

Conclusion

I hope you enjoyed reading this article and learned how to fix Indentation Errors in Python. Please subscribe and stay tuned for more exciting articles in the future!

Понравилась статья? Поделить с друзьями:
  • Incrementing error counter on sa attempt 2 of 5 retransmit phase 1
  • Incorrect syntax near sql ошибка
  • Incorrect skeleton type for anim 552 at creation как исправить
  • Incorrect path to ini file как исправить
  • Incorrect media paths media in config file expect some media to be missing как исправить