I'm getting an IndentationError. How do I fix it?Python IndentationError: unindent does not match any outer indentation levelpython3 unreasonably return TabError: inconsistent use of tabs and spaces in indentationHow to fix IndentationError: unexpected indent in python scriptPython if/elif syntax error… WHYIndentationError: unindent does not match any outer indentation level with pythonWhile True in Python - I am always getting an error messageNew and stuck on IndentationError: expected an indented blockRandom indentation errors?How to use input() to only accept positive numbers as int,IndentationError: expected an indented block on codeHow to merge two dictionaries in a single expression?How do I check if a list is empty?How do I check whether a file exists without exceptions?How can I safely create a nested directory in Python?How to get the current time in PythonHow do I sort a dictionary by value?How do I get the number of elements in a list in Python?How do I list all files of a directory?How do I format XML in Notepad++?unindent does not match any outer indentation level

As a small race with a heavy weapon, does enlage remove the disadvantage?

Was Mohammed the most popular first name for boys born in Berlin in 2018?

What happens when the drag force exceeds the weight of an object falling into earth?

What are my options legally if NYC company is not paying salary?

Opposite party turned away from voting when ballot is all opposing party

Why did Ham the Chimp push levers?

Why is it wrong to *implement* myself a known, published, widely believed to be secure crypto algorithm?

GLM: Modelling proportional data - account for variation in total sample size

How to append code verbatim to .bashrc?

Is there a reason why Turkey took the Balkan territories of the Ottoman Empire, instead of Greece or another of the Balkan states?

Do oversize pulley wheels increase derailleur capacity?

"I can't place her": How do Russian speakers express this idea colloquially?

I want to write a blog post building upon someone else's paper, how can I properly cite/credit them?

How can one see if an address is multisig?

How could a civilization detect tachyons?

Is your maximum jump distance halved by grappling?

I'm attempting to understand my 401k match and how much I need to contribute to maximize the match

What computer port is this?

What should I use to get rid of some kind of weed in my onions

Is the tensor product (of vector spaces) commutative?

Can I bring back Planetary Romance as a genre?

Can a character shove an enemy who is already prone?

Why did Missandei say this?

While drilling into kitchen wall, hit a wire - any advice?



I'm getting an IndentationError. How do I fix it?


Python IndentationError: unindent does not match any outer indentation levelpython3 unreasonably return TabError: inconsistent use of tabs and spaces in indentationHow to fix IndentationError: unexpected indent in python scriptPython if/elif syntax error… WHYIndentationError: unindent does not match any outer indentation level with pythonWhile True in Python - I am always getting an error messageNew and stuck on IndentationError: expected an indented blockRandom indentation errors?How to use input() to only accept positive numbers as int,IndentationError: expected an indented block on codeHow to merge two dictionaries in a single expression?How do I check if a list is empty?How do I check whether a file exists without exceptions?How can I safely create a nested directory in Python?How to get the current time in PythonHow do I sort a dictionary by value?How do I get the number of elements in a list in Python?How do I list all files of a directory?How do I format XML in Notepad++?unindent does not match any outer indentation level






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








36















I have a Python script:



if True:
if False:
print('foo')
print('bar')


However, when I attempt to run my script, Python raises an IndentationError:



 File "script.py", line 4
print('bar')
^
IndentationError: unindent does not match any outer indentation level


I kept playing around with my program, and I was also able to produce three other errors:



  • IndentationError: unexpected indent

  • IndentationError: expected an indented block

  • TabError: inconsistent use of tabs and spaces in indentation

What do these errors mean? What am I doing wrong? How can I fix my code?










share|improve this question



















  • 1





    If anyone raises a fuss over this...just post a question on Meta Stack Overflow about it. That's the best place to handle discussion on whether or not this question is appropriate, and even if it'd be suitable as a dupe target at all.

    – Makoto
    Aug 10 '17 at 19:21






  • 2





    "IndentationError: expected an indented block" seems to be missing from the question. Hopefully the Q&A itself will stop a lot of questions even before they're asked, so no closing would be required in the first place (I wish...).

    – Andras Deak
    Aug 10 '17 at 20:10






  • 8





    Alternative perspective: I don't consider most indentation problems to be typos, so I'll continue to dupe-close them, and I may use this as the dupe target.

    – user2357112
    Aug 10 '17 at 23:50











  • Alright @MartijnPieters, added a section that deals with SyntaxError related indentation problems. Feel free to modify it if you think it can be improved.

    – Christian Dean
    Mar 9 '18 at 2:33












  • Excellent, thanks! I think that works very well.

    – Martijn Pieters
    Mar 9 '18 at 8:27

















36















I have a Python script:



if True:
if False:
print('foo')
print('bar')


However, when I attempt to run my script, Python raises an IndentationError:



 File "script.py", line 4
print('bar')
^
IndentationError: unindent does not match any outer indentation level


I kept playing around with my program, and I was also able to produce three other errors:



  • IndentationError: unexpected indent

  • IndentationError: expected an indented block

  • TabError: inconsistent use of tabs and spaces in indentation

What do these errors mean? What am I doing wrong? How can I fix my code?










share|improve this question



















  • 1





    If anyone raises a fuss over this...just post a question on Meta Stack Overflow about it. That's the best place to handle discussion on whether or not this question is appropriate, and even if it'd be suitable as a dupe target at all.

    – Makoto
    Aug 10 '17 at 19:21






  • 2





    "IndentationError: expected an indented block" seems to be missing from the question. Hopefully the Q&A itself will stop a lot of questions even before they're asked, so no closing would be required in the first place (I wish...).

    – Andras Deak
    Aug 10 '17 at 20:10






  • 8





    Alternative perspective: I don't consider most indentation problems to be typos, so I'll continue to dupe-close them, and I may use this as the dupe target.

    – user2357112
    Aug 10 '17 at 23:50











  • Alright @MartijnPieters, added a section that deals with SyntaxError related indentation problems. Feel free to modify it if you think it can be improved.

    – Christian Dean
    Mar 9 '18 at 2:33












  • Excellent, thanks! I think that works very well.

    – Martijn Pieters
    Mar 9 '18 at 8:27













36












36








36


10






I have a Python script:



if True:
if False:
print('foo')
print('bar')


However, when I attempt to run my script, Python raises an IndentationError:



 File "script.py", line 4
print('bar')
^
IndentationError: unindent does not match any outer indentation level


I kept playing around with my program, and I was also able to produce three other errors:



  • IndentationError: unexpected indent

  • IndentationError: expected an indented block

  • TabError: inconsistent use of tabs and spaces in indentation

What do these errors mean? What am I doing wrong? How can I fix my code?










share|improve this question
















I have a Python script:



if True:
if False:
print('foo')
print('bar')


However, when I attempt to run my script, Python raises an IndentationError:



 File "script.py", line 4
print('bar')
^
IndentationError: unindent does not match any outer indentation level


I kept playing around with my program, and I was also able to produce three other errors:



  • IndentationError: unexpected indent

  • IndentationError: expected an indented block

  • TabError: inconsistent use of tabs and spaces in indentation

What do these errors mean? What am I doing wrong? How can I fix my code?







python exception error-handling indentation code-formatting






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited May 1 at 0:38









kmario23

20.5k56680




20.5k56680










asked Aug 10 '17 at 19:06









Christian DeanChristian Dean

15.9k62860




15.9k62860







  • 1





    If anyone raises a fuss over this...just post a question on Meta Stack Overflow about it. That's the best place to handle discussion on whether or not this question is appropriate, and even if it'd be suitable as a dupe target at all.

    – Makoto
    Aug 10 '17 at 19:21






  • 2





    "IndentationError: expected an indented block" seems to be missing from the question. Hopefully the Q&A itself will stop a lot of questions even before they're asked, so no closing would be required in the first place (I wish...).

    – Andras Deak
    Aug 10 '17 at 20:10






  • 8





    Alternative perspective: I don't consider most indentation problems to be typos, so I'll continue to dupe-close them, and I may use this as the dupe target.

    – user2357112
    Aug 10 '17 at 23:50











  • Alright @MartijnPieters, added a section that deals with SyntaxError related indentation problems. Feel free to modify it if you think it can be improved.

    – Christian Dean
    Mar 9 '18 at 2:33












  • Excellent, thanks! I think that works very well.

    – Martijn Pieters
    Mar 9 '18 at 8:27












  • 1





    If anyone raises a fuss over this...just post a question on Meta Stack Overflow about it. That's the best place to handle discussion on whether or not this question is appropriate, and even if it'd be suitable as a dupe target at all.

    – Makoto
    Aug 10 '17 at 19:21






  • 2





    "IndentationError: expected an indented block" seems to be missing from the question. Hopefully the Q&A itself will stop a lot of questions even before they're asked, so no closing would be required in the first place (I wish...).

    – Andras Deak
    Aug 10 '17 at 20:10






  • 8





    Alternative perspective: I don't consider most indentation problems to be typos, so I'll continue to dupe-close them, and I may use this as the dupe target.

    – user2357112
    Aug 10 '17 at 23:50











  • Alright @MartijnPieters, added a section that deals with SyntaxError related indentation problems. Feel free to modify it if you think it can be improved.

    – Christian Dean
    Mar 9 '18 at 2:33












  • Excellent, thanks! I think that works very well.

    – Martijn Pieters
    Mar 9 '18 at 8:27







1




1





If anyone raises a fuss over this...just post a question on Meta Stack Overflow about it. That's the best place to handle discussion on whether or not this question is appropriate, and even if it'd be suitable as a dupe target at all.

– Makoto
Aug 10 '17 at 19:21





If anyone raises a fuss over this...just post a question on Meta Stack Overflow about it. That's the best place to handle discussion on whether or not this question is appropriate, and even if it'd be suitable as a dupe target at all.

– Makoto
Aug 10 '17 at 19:21




2




2





"IndentationError: expected an indented block" seems to be missing from the question. Hopefully the Q&A itself will stop a lot of questions even before they're asked, so no closing would be required in the first place (I wish...).

– Andras Deak
Aug 10 '17 at 20:10





"IndentationError: expected an indented block" seems to be missing from the question. Hopefully the Q&A itself will stop a lot of questions even before they're asked, so no closing would be required in the first place (I wish...).

– Andras Deak
Aug 10 '17 at 20:10




8




8





Alternative perspective: I don't consider most indentation problems to be typos, so I'll continue to dupe-close them, and I may use this as the dupe target.

– user2357112
Aug 10 '17 at 23:50





Alternative perspective: I don't consider most indentation problems to be typos, so I'll continue to dupe-close them, and I may use this as the dupe target.

– user2357112
Aug 10 '17 at 23:50













Alright @MartijnPieters, added a section that deals with SyntaxError related indentation problems. Feel free to modify it if you think it can be improved.

– Christian Dean
Mar 9 '18 at 2:33






Alright @MartijnPieters, added a section that deals with SyntaxError related indentation problems. Feel free to modify it if you think it can be improved.

– Christian Dean
Mar 9 '18 at 2:33














Excellent, thanks! I think that works very well.

– Martijn Pieters
Mar 9 '18 at 8:27





Excellent, thanks! I think that works very well.

– Martijn Pieters
Mar 9 '18 at 8:27












4 Answers
4






active

oldest

votes


















52














Why does indentation matter?



In Python, indentation is used to delimit blocks of code. This is different from many other languages that use curly braces to delimit blocks such as Java, Javascript, and C. Because of this, Python users must pay close attention to when and how they indent their code because whitespace matters.



When Python encounters a problem with the indentation of your program, it either raises an exception called IndentationError or TabError.



A little history



The historical reasons for why Python uses indentation vs the arguably more commonly accepted curly braces is outlined in an article of the history of Python by Guido van Rossum - the creator of Python:




Python’s use of indentation comes directly from ABC, but this idea didn’t originate with ABC--it had already been promoted by Donald Knuth and was a well-known concept of programming style. (The occam programming language also used it.) However, ABC’s authors did invent the use of the colon that separates the lead-in clause from the indented block. After early user testing without the colon, it was discovered that the meaning of the indentation was unclear to beginners being taught the first steps of programming. The addition of the colon clarified it significantly: the colon somehow draws attention to what follows and ties the phrases before and after it together in just the right way.




How do I indent my code?



The basic rule for indenting Python code (considering that you treat the entire program as a "basic block") is: The first statement in a basic block, and each subsequent statement after it must be indented by the same amount.



So technically the following Python program is correct:



def perm(l):
# Compute the list of all permutations of l
if len(l) <= 1:
return [l]
r = []
for i in range(len(l)):
s = l[:i] + l[i+1:]
p = perm(s)
for x in p:
r.append(l[i:i+1] + x)
return r


However, as you can probably tell from above, randomly indenting your code makes is extremely hard to read and follow the flow of the program. It's better to be consistent and follow a style.



PEP8 - The Python style guide - recommends that four spaces per indentation level should be used:




Use 4 spaces per indentation level.




That is, each statement that is starting a new block and each subsequent statement in the new block, should be indented four spaces from the current indentation level. Here is the above program indented according to the PEP8 style guide:



def perm(l):
# Compute the list of all permutations of l
if len(l) <= 1:
return [l]
r = []
for i in range(len(l)):
s = l[:i] + l[i+1:]
p = perm(s)
for x in p:
r.append(l[i:i+1] + x)
return r


Can I still use tabs?



Python realizes that some people still prefer tabs over spaces and that legacy code may use tabs rather than spaces, so it allows the use of tabs as indentation. PEP8 touches on this topic:




Spaces are the preferred indentation method.



Tabs should be used solely to remain consistent with code that is already indented with tabs.




Note however the one big caveat is not to use both tabs and spaces for indentation. Doing so can cause all kinds of strange hard to debug indentation errors. Python expands tabs to the next 8th column, but if your editor is set to a tab size of 4 columns, or you you use spaces as well as tabs, you can easily produce indented code that looks fine in your editor, but Python will refuse to run. The Python 3 compiler explicitly rejects any program containing an ambiguous mixture of tabs and spaces, usually by raising a TabError. However, by default, mixing tabs and spaces is still allowed in Python 2, but it is highly recommended not to use this "feature". Use the -t and -tt command line flags to force Python 2 to raise a warning or (preferably) an error respectively. PEP8 also discusses this topic:




Python 3 disallows mixing the use of tabs and spaces for indentation.



Python 2 code indented with a mixture of tabs and spaces should be converted to using spaces exclusively.



When invoking the Python 2 command line interpreter with the -t option, it issues warnings about code that illegally mixes tabs and spaces. When using -tt these warnings become errors. These options are highly recommended!




What does "IndentationError: unexpected indent" mean?



Problem



This error occurs when a statement is unnecessarily indented or its indentation does not match the indentation of former statements in the same block. For example, the first statement in the program below is unnecessarily indented:



>>> print('Hello') # this is indented 
File "<stdin>", line 1
print('Hello') # this is indented
^
IndentationError: unexpected indent


In this example, the can_drive = True line in the if block does not match the indentation of any former statement:



>>> age = 10
>>> can_drive = None
>>>
>>> if age >= 18:
... print('You can drive')
... can_drive = True # incorrectly indented
File "<stdin>", line 3
can_drive = True # incorrectly indented
^
IndentationError: unexpected indent


Fix



The fix for this error is to first make sure the problematic line even needs to be indented. For example, the above example using print can be fixed simply be unindenting the line:



>>> print('Hello') # simply unindent the line
Hello


However, if you are sure the line does need to be indented, the indentation needs to match that of a former statement in the same block. In the second example above using if, we can fix the error by making sure the line with can_drive = True is indented at the same level as the former statements in the if body:



>>> age = 10
>>> can_drive = None
>>>
>>> if age >= 18:
... print('You can drive')
... can_drive = True # indent this line at the same level.
...


What does "IndentationError: expected an indented block" mean?



Problem



This error occurs when Python sees the 'header' for a compound statement, such as if <condition>: or while <condition>: but the compound statement's body or block is never defined. For example in the code below we began an if statement, but we never define a body for the statement:



>>> if True:
...
File "<stdin>", line 2

^
IndentationError: expected an indented block


In this second example, we began writing a for loop, but we forget to indent the for loop body. So Python still expects an indented block for the for loop body:



>>> names = ['sarah', 'lucy', 'michael']
>>> for name in names:
... print(name)
File "<stdin>", line 2
print(name)
^
IndentationError: expected an indented block


Comments don't count as bodies:



>>> if True:
... # TODO
...
File "<stdin>", line 3

^
IndentationError: expected an indented block


Fix



The fix for this error is to simply include a body for the compound statement.



As shown above, a common mistake by new users is that they forget to indent the body. If this is the case, make sure each statement meant to be included in the compound statement's body is indented at the same level under the compound statement's beginning. Here is the above example fixed:



>>> names = ['sarah', 'lucy', 'michael']
>>> for name in names:
... print(name) # The for loop body is now correctly indented.
...
sarah
lucy
michael


Another common case is that, for some reason, a user may not want to define an actual body for the compound statement, or the body may be commented out. In this case, the pass statement can be used. The pass statement can be used anywhere Python expects one or more statements as a placeholder. From the documentation for pass:




pass is a null operation — when it is executed, nothing happens. It is useful as a placeholder when a statement is required syntactically, but no code needs to be executed, for example:



def f(arg): pass # a function that does nothing (yet)

class C: pass # a class with no methods (yet)



Here is the above example with the if statement fixed by using the pass keyword:



>>> if True:
... pass # We don't want to define a body.
...
>>>


What does "IndentationError: unindent does not match any outer indentation level" mean?



Problem



This error occurs when you unindent a statement, but now the indentation level of that statement does not match that of any former statement. For example, in the below code we unindent the second call to print. However, the indentation level does not match that of any former statement:



>>> if True:
... if True:
... print('yes')
... print()
File "<stdin>", line 4
print()
^
IndentationError: unindent does not match any outer indentation level


This error is especially hard to catch because even one space will cause your code to fail.



Fix



The fix is to ensure that when you unindent a statement, the indentation level matches that of a former statement. Consider the above example once again. In the example, I want the second call to print to be in the first if statements body. So I need to make sure that that line's indentation level matches that of the former statements in the first if statement's body:



>>> if True:
... if True:
... print('yes')
... print() # indentation level now matches former statement's level.
...
yes

>>>


I'm still getting an IndentationError but my program appears to be correctly indented. What do I do?



If your program visually appears to have correct indentation, but your still getting an IndentationError you have most likely mixed tabs with spaces. This will sometimes cause Python to raises strange errors. See the subsection Special cases under What does "TabError: inconsistent use of tabs and spaces in indentation" mean? for an more in-depth explanation of the problem.



What does "TabError: inconsistent use of tabs and spaces in indentation" mean?



Problem



This error only occurs when you attempt to mix tabs and spaces as indentation characters. As said above, Python will not allow your program to contain a mix of tabs and spaces, and will raise the specific exception TabError if it finds you have. For example, in the program below, a mix of tabs and spaces is used for indentation:



>>> if True:
... if True:
... print()
... print()
... print()
File "<stdin>", line 5
print()
^
TabError: inconsistent use of tabs and spaces in indentation


Here is a picture which visually shows the whitespace in the above program. Gray dots are spaces, and gray arrows are tabs:



enter image description here



We can see we have indeed mixed spaces and tabs for indentation.



Special cases



Note Python will not always raise a TabError if you mix tabs and spaces into your program. If the program indentation is unambiguous, Python will allow tabs and spaces to be mixed. For example:



>>> if True:
... if True: # tab
... pass # tab, then 4 spaces
...
>>>


And sometimes Python simply chokes on the mixture of tabs and spaces and erroneously raises an IndentationError exception when a TabError would be more appropriate. Another example:



>>> if True:
... pass # tab
... pass # 4 spaces
File "<stdin>", line 3
pass # 4 spaces
^
IndentationError: unindent does not match any outer indentation level


As you can see, running your code this way can create mysterious errors. Even though the program visually appears to be fine, Python became confused trying to parse the tabs and spaces used for indention and errored out.



These are excellent examples that demonstrate why to never mix tabs and spaces and make use of the -t and -tt interpreter flags when using Python 2.



Fix



If your program is short, probably the easiest and quickest fix is to simply re-indent the program. Make sure each statement is indented by four spaces per indention level (see How do I indent my code?).



However, if you already have a large program that you've mixed tabs and spaces into, there are automated tools that can be used to convert all of your indentation to just spaces.



Many editors such as PyCharm and SublimeText have options to automatically convert tabs to spaces. There are also several on-line tools such as Tabs To Spaces or Browserling that allow you to quickly re-indent your code. There are also tools written in Python. autopep8 for example can automatically re-indent your code and other indentation errors as well.



Even the best tools though will sometimes not be able to fix all of your indentation errors and you'll have to fix them manually. That's why it's important to always properly indent your code from the start.



A note about "SyntaxError" related indentation problems



Although not often, sometimes certain SyntaxError exceptions are raised due to incorrect indentation. For example, look at the code below:



if True:
pass
pass # oops! this statement should be indented!.
else:
pass


When the above code is run, a SyntaxError is raised:



Traceback (most recent call last):
File "python", line 4
else:
^
SyntaxError: invalid syntax


Although Python raises a SyntaxError, the real problem with the above code, is that the second pass statement should be indented. Because the second pass isn't indented, Python doesn't realize that the previous if statement and the else statement are meant to be connected.



The fix for this type of error is to simply correctly re-indent your code. To see how to properly indent your code, see the section How do I indent my code?.



I'm still having a hard time with Python's indentation syntax. What do I do?



Don't get discouraged if you're still struggling. It can take time to get use to
Python's whitespace syntax rules. Here are some tips to help:



  • Get an editor that will tell you when you have an indentation error. Some goods ones are as said above are, PyCharm, SublimeText, and Jupyter Notebook.

  • When you indent your code, count out loud to yourself how many times you press the space-bar (or tab key). For example, if you needed to indent a line by four spaces, you would say out loud "one, two, three, four" while simultaneously pressing the space-bar each time. It sounds silly, but it helps train your brain to think about how deep you're indenting your code.

  • If you have an editor, see if it has an option to automatically convert tabs to spaces.

  • View others' code. Browse github or Stackoverflow and see examples of Python code.

  • Just write code. That's the single best way to get better. The more you write Python code, the better you'll get.

Resources used



  • https://en.wikipedia.org/

  • https://docs.python.org/3/

  • http://python-history.blogspot.com/2009/02/early-language-design-and-development.html

  • https://www.python.org/dev/peps/pep-0008/





share|improve this answer

























  • @user2357112 Ah, thanks for the edit. I did some test and it always seemed to raise a TabError but I wasn't 100% sure.

    – Christian Dean
    Aug 11 '17 at 17:11







  • 2





    Here's a demo of not-TabError, and here's a demo where Python doesn't raise an exception at all for mixed tabs and spaces because it considers the mixing unambiguous.

    – user2357112
    Aug 11 '17 at 17:16











  • Man you rocked this one!

    – blitu12345
    Jun 9 '18 at 9:53











  • @blitu12345 Thanks man, I appreciate the kind words!

    – Christian Dean
    Jun 9 '18 at 12:51


















2














Sublime Text 3



If it happens that you code in Sublime Text 3, this could help you with indentations problemes



In Sublime Text, while editing a Python file:



Sublime Text menu > Preferences > Settings - Syntax Specific :



Python.sublime-settings




"tab_size": 4,
"translate_tabs_to_spaces": true






share|improve this answer






























    0














    You see, you have a tiny error.



    if True:
    if False:
    print('foo')
    print('bar')


    You were supposed to do:



    if True:
    if False:
    print('foo')
    print('bar')


    As you can see your print is only indented 3 spaces, it is supposed to be indented 4 spaces.






    share|improve this answer






























      0














      Quick fix for Sublime users:



      1. Press Ctrl-H to access Find and Replace

      2. In Find: Type 4 spaces

      3. In Replace: Copy and paste a tab from somewhere in your code
        Click Replace All





      share|improve this answer























        Your Answer






        StackExchange.ifUsing("editor", function ()
        StackExchange.using("externalEditor", function ()
        StackExchange.using("snippets", function ()
        StackExchange.snippets.init();
        );
        );
        , "code-snippets");

        StackExchange.ready(function()
        var channelOptions =
        tags: "".split(" "),
        id: "1"
        ;
        initTagRenderer("".split(" "), "".split(" "), channelOptions);

        StackExchange.using("externalEditor", function()
        // Have to fire editor after snippets, if snippets enabled
        if (StackExchange.settings.snippets.snippetsEnabled)
        StackExchange.using("snippets", function()
        createEditor();
        );

        else
        createEditor();

        );

        function createEditor()
        StackExchange.prepareEditor(
        heartbeatType: 'answer',
        autoActivateHeartbeat: false,
        convertImagesToLinks: true,
        noModals: true,
        showLowRepImageUploadWarning: true,
        reputationToPostImages: 10,
        bindNavPrevention: true,
        postfix: "",
        imageUploader:
        brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
        contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
        allowUrls: true
        ,
        onDemand: true,
        discardSelector: ".discard-answer"
        ,immediatelyShowMarkdownHelp:true
        );



        );













        draft saved

        draft discarded


















        StackExchange.ready(
        function ()
        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f45621722%2fim-getting-an-indentationerror-how-do-i-fix-it%23new-answer', 'question_page');

        );

        Post as a guest















        Required, but never shown

























        4 Answers
        4






        active

        oldest

        votes








        4 Answers
        4






        active

        oldest

        votes









        active

        oldest

        votes






        active

        oldest

        votes









        52














        Why does indentation matter?



        In Python, indentation is used to delimit blocks of code. This is different from many other languages that use curly braces to delimit blocks such as Java, Javascript, and C. Because of this, Python users must pay close attention to when and how they indent their code because whitespace matters.



        When Python encounters a problem with the indentation of your program, it either raises an exception called IndentationError or TabError.



        A little history



        The historical reasons for why Python uses indentation vs the arguably more commonly accepted curly braces is outlined in an article of the history of Python by Guido van Rossum - the creator of Python:




        Python’s use of indentation comes directly from ABC, but this idea didn’t originate with ABC--it had already been promoted by Donald Knuth and was a well-known concept of programming style. (The occam programming language also used it.) However, ABC’s authors did invent the use of the colon that separates the lead-in clause from the indented block. After early user testing without the colon, it was discovered that the meaning of the indentation was unclear to beginners being taught the first steps of programming. The addition of the colon clarified it significantly: the colon somehow draws attention to what follows and ties the phrases before and after it together in just the right way.




        How do I indent my code?



        The basic rule for indenting Python code (considering that you treat the entire program as a "basic block") is: The first statement in a basic block, and each subsequent statement after it must be indented by the same amount.



        So technically the following Python program is correct:



        def perm(l):
        # Compute the list of all permutations of l
        if len(l) <= 1:
        return [l]
        r = []
        for i in range(len(l)):
        s = l[:i] + l[i+1:]
        p = perm(s)
        for x in p:
        r.append(l[i:i+1] + x)
        return r


        However, as you can probably tell from above, randomly indenting your code makes is extremely hard to read and follow the flow of the program. It's better to be consistent and follow a style.



        PEP8 - The Python style guide - recommends that four spaces per indentation level should be used:




        Use 4 spaces per indentation level.




        That is, each statement that is starting a new block and each subsequent statement in the new block, should be indented four spaces from the current indentation level. Here is the above program indented according to the PEP8 style guide:



        def perm(l):
        # Compute the list of all permutations of l
        if len(l) <= 1:
        return [l]
        r = []
        for i in range(len(l)):
        s = l[:i] + l[i+1:]
        p = perm(s)
        for x in p:
        r.append(l[i:i+1] + x)
        return r


        Can I still use tabs?



        Python realizes that some people still prefer tabs over spaces and that legacy code may use tabs rather than spaces, so it allows the use of tabs as indentation. PEP8 touches on this topic:




        Spaces are the preferred indentation method.



        Tabs should be used solely to remain consistent with code that is already indented with tabs.




        Note however the one big caveat is not to use both tabs and spaces for indentation. Doing so can cause all kinds of strange hard to debug indentation errors. Python expands tabs to the next 8th column, but if your editor is set to a tab size of 4 columns, or you you use spaces as well as tabs, you can easily produce indented code that looks fine in your editor, but Python will refuse to run. The Python 3 compiler explicitly rejects any program containing an ambiguous mixture of tabs and spaces, usually by raising a TabError. However, by default, mixing tabs and spaces is still allowed in Python 2, but it is highly recommended not to use this "feature". Use the -t and -tt command line flags to force Python 2 to raise a warning or (preferably) an error respectively. PEP8 also discusses this topic:




        Python 3 disallows mixing the use of tabs and spaces for indentation.



        Python 2 code indented with a mixture of tabs and spaces should be converted to using spaces exclusively.



        When invoking the Python 2 command line interpreter with the -t option, it issues warnings about code that illegally mixes tabs and spaces. When using -tt these warnings become errors. These options are highly recommended!




        What does "IndentationError: unexpected indent" mean?



        Problem



        This error occurs when a statement is unnecessarily indented or its indentation does not match the indentation of former statements in the same block. For example, the first statement in the program below is unnecessarily indented:



        >>> print('Hello') # this is indented 
        File "<stdin>", line 1
        print('Hello') # this is indented
        ^
        IndentationError: unexpected indent


        In this example, the can_drive = True line in the if block does not match the indentation of any former statement:



        >>> age = 10
        >>> can_drive = None
        >>>
        >>> if age >= 18:
        ... print('You can drive')
        ... can_drive = True # incorrectly indented
        File "<stdin>", line 3
        can_drive = True # incorrectly indented
        ^
        IndentationError: unexpected indent


        Fix



        The fix for this error is to first make sure the problematic line even needs to be indented. For example, the above example using print can be fixed simply be unindenting the line:



        >>> print('Hello') # simply unindent the line
        Hello


        However, if you are sure the line does need to be indented, the indentation needs to match that of a former statement in the same block. In the second example above using if, we can fix the error by making sure the line with can_drive = True is indented at the same level as the former statements in the if body:



        >>> age = 10
        >>> can_drive = None
        >>>
        >>> if age >= 18:
        ... print('You can drive')
        ... can_drive = True # indent this line at the same level.
        ...


        What does "IndentationError: expected an indented block" mean?



        Problem



        This error occurs when Python sees the 'header' for a compound statement, such as if <condition>: or while <condition>: but the compound statement's body or block is never defined. For example in the code below we began an if statement, but we never define a body for the statement:



        >>> if True:
        ...
        File "<stdin>", line 2

        ^
        IndentationError: expected an indented block


        In this second example, we began writing a for loop, but we forget to indent the for loop body. So Python still expects an indented block for the for loop body:



        >>> names = ['sarah', 'lucy', 'michael']
        >>> for name in names:
        ... print(name)
        File "<stdin>", line 2
        print(name)
        ^
        IndentationError: expected an indented block


        Comments don't count as bodies:



        >>> if True:
        ... # TODO
        ...
        File "<stdin>", line 3

        ^
        IndentationError: expected an indented block


        Fix



        The fix for this error is to simply include a body for the compound statement.



        As shown above, a common mistake by new users is that they forget to indent the body. If this is the case, make sure each statement meant to be included in the compound statement's body is indented at the same level under the compound statement's beginning. Here is the above example fixed:



        >>> names = ['sarah', 'lucy', 'michael']
        >>> for name in names:
        ... print(name) # The for loop body is now correctly indented.
        ...
        sarah
        lucy
        michael


        Another common case is that, for some reason, a user may not want to define an actual body for the compound statement, or the body may be commented out. In this case, the pass statement can be used. The pass statement can be used anywhere Python expects one or more statements as a placeholder. From the documentation for pass:




        pass is a null operation — when it is executed, nothing happens. It is useful as a placeholder when a statement is required syntactically, but no code needs to be executed, for example:



        def f(arg): pass # a function that does nothing (yet)

        class C: pass # a class with no methods (yet)



        Here is the above example with the if statement fixed by using the pass keyword:



        >>> if True:
        ... pass # We don't want to define a body.
        ...
        >>>


        What does "IndentationError: unindent does not match any outer indentation level" mean?



        Problem



        This error occurs when you unindent a statement, but now the indentation level of that statement does not match that of any former statement. For example, in the below code we unindent the second call to print. However, the indentation level does not match that of any former statement:



        >>> if True:
        ... if True:
        ... print('yes')
        ... print()
        File "<stdin>", line 4
        print()
        ^
        IndentationError: unindent does not match any outer indentation level


        This error is especially hard to catch because even one space will cause your code to fail.



        Fix



        The fix is to ensure that when you unindent a statement, the indentation level matches that of a former statement. Consider the above example once again. In the example, I want the second call to print to be in the first if statements body. So I need to make sure that that line's indentation level matches that of the former statements in the first if statement's body:



        >>> if True:
        ... if True:
        ... print('yes')
        ... print() # indentation level now matches former statement's level.
        ...
        yes

        >>>


        I'm still getting an IndentationError but my program appears to be correctly indented. What do I do?



        If your program visually appears to have correct indentation, but your still getting an IndentationError you have most likely mixed tabs with spaces. This will sometimes cause Python to raises strange errors. See the subsection Special cases under What does "TabError: inconsistent use of tabs and spaces in indentation" mean? for an more in-depth explanation of the problem.



        What does "TabError: inconsistent use of tabs and spaces in indentation" mean?



        Problem



        This error only occurs when you attempt to mix tabs and spaces as indentation characters. As said above, Python will not allow your program to contain a mix of tabs and spaces, and will raise the specific exception TabError if it finds you have. For example, in the program below, a mix of tabs and spaces is used for indentation:



        >>> if True:
        ... if True:
        ... print()
        ... print()
        ... print()
        File "<stdin>", line 5
        print()
        ^
        TabError: inconsistent use of tabs and spaces in indentation


        Here is a picture which visually shows the whitespace in the above program. Gray dots are spaces, and gray arrows are tabs:



        enter image description here



        We can see we have indeed mixed spaces and tabs for indentation.



        Special cases



        Note Python will not always raise a TabError if you mix tabs and spaces into your program. If the program indentation is unambiguous, Python will allow tabs and spaces to be mixed. For example:



        >>> if True:
        ... if True: # tab
        ... pass # tab, then 4 spaces
        ...
        >>>


        And sometimes Python simply chokes on the mixture of tabs and spaces and erroneously raises an IndentationError exception when a TabError would be more appropriate. Another example:



        >>> if True:
        ... pass # tab
        ... pass # 4 spaces
        File "<stdin>", line 3
        pass # 4 spaces
        ^
        IndentationError: unindent does not match any outer indentation level


        As you can see, running your code this way can create mysterious errors. Even though the program visually appears to be fine, Python became confused trying to parse the tabs and spaces used for indention and errored out.



        These are excellent examples that demonstrate why to never mix tabs and spaces and make use of the -t and -tt interpreter flags when using Python 2.



        Fix



        If your program is short, probably the easiest and quickest fix is to simply re-indent the program. Make sure each statement is indented by four spaces per indention level (see How do I indent my code?).



        However, if you already have a large program that you've mixed tabs and spaces into, there are automated tools that can be used to convert all of your indentation to just spaces.



        Many editors such as PyCharm and SublimeText have options to automatically convert tabs to spaces. There are also several on-line tools such as Tabs To Spaces or Browserling that allow you to quickly re-indent your code. There are also tools written in Python. autopep8 for example can automatically re-indent your code and other indentation errors as well.



        Even the best tools though will sometimes not be able to fix all of your indentation errors and you'll have to fix them manually. That's why it's important to always properly indent your code from the start.



        A note about "SyntaxError" related indentation problems



        Although not often, sometimes certain SyntaxError exceptions are raised due to incorrect indentation. For example, look at the code below:



        if True:
        pass
        pass # oops! this statement should be indented!.
        else:
        pass


        When the above code is run, a SyntaxError is raised:



        Traceback (most recent call last):
        File "python", line 4
        else:
        ^
        SyntaxError: invalid syntax


        Although Python raises a SyntaxError, the real problem with the above code, is that the second pass statement should be indented. Because the second pass isn't indented, Python doesn't realize that the previous if statement and the else statement are meant to be connected.



        The fix for this type of error is to simply correctly re-indent your code. To see how to properly indent your code, see the section How do I indent my code?.



        I'm still having a hard time with Python's indentation syntax. What do I do?



        Don't get discouraged if you're still struggling. It can take time to get use to
        Python's whitespace syntax rules. Here are some tips to help:



        • Get an editor that will tell you when you have an indentation error. Some goods ones are as said above are, PyCharm, SublimeText, and Jupyter Notebook.

        • When you indent your code, count out loud to yourself how many times you press the space-bar (or tab key). For example, if you needed to indent a line by four spaces, you would say out loud "one, two, three, four" while simultaneously pressing the space-bar each time. It sounds silly, but it helps train your brain to think about how deep you're indenting your code.

        • If you have an editor, see if it has an option to automatically convert tabs to spaces.

        • View others' code. Browse github or Stackoverflow and see examples of Python code.

        • Just write code. That's the single best way to get better. The more you write Python code, the better you'll get.

        Resources used



        • https://en.wikipedia.org/

        • https://docs.python.org/3/

        • http://python-history.blogspot.com/2009/02/early-language-design-and-development.html

        • https://www.python.org/dev/peps/pep-0008/





        share|improve this answer

























        • @user2357112 Ah, thanks for the edit. I did some test and it always seemed to raise a TabError but I wasn't 100% sure.

          – Christian Dean
          Aug 11 '17 at 17:11







        • 2





          Here's a demo of not-TabError, and here's a demo where Python doesn't raise an exception at all for mixed tabs and spaces because it considers the mixing unambiguous.

          – user2357112
          Aug 11 '17 at 17:16











        • Man you rocked this one!

          – blitu12345
          Jun 9 '18 at 9:53











        • @blitu12345 Thanks man, I appreciate the kind words!

          – Christian Dean
          Jun 9 '18 at 12:51















        52














        Why does indentation matter?



        In Python, indentation is used to delimit blocks of code. This is different from many other languages that use curly braces to delimit blocks such as Java, Javascript, and C. Because of this, Python users must pay close attention to when and how they indent their code because whitespace matters.



        When Python encounters a problem with the indentation of your program, it either raises an exception called IndentationError or TabError.



        A little history



        The historical reasons for why Python uses indentation vs the arguably more commonly accepted curly braces is outlined in an article of the history of Python by Guido van Rossum - the creator of Python:




        Python’s use of indentation comes directly from ABC, but this idea didn’t originate with ABC--it had already been promoted by Donald Knuth and was a well-known concept of programming style. (The occam programming language also used it.) However, ABC’s authors did invent the use of the colon that separates the lead-in clause from the indented block. After early user testing without the colon, it was discovered that the meaning of the indentation was unclear to beginners being taught the first steps of programming. The addition of the colon clarified it significantly: the colon somehow draws attention to what follows and ties the phrases before and after it together in just the right way.




        How do I indent my code?



        The basic rule for indenting Python code (considering that you treat the entire program as a "basic block") is: The first statement in a basic block, and each subsequent statement after it must be indented by the same amount.



        So technically the following Python program is correct:



        def perm(l):
        # Compute the list of all permutations of l
        if len(l) <= 1:
        return [l]
        r = []
        for i in range(len(l)):
        s = l[:i] + l[i+1:]
        p = perm(s)
        for x in p:
        r.append(l[i:i+1] + x)
        return r


        However, as you can probably tell from above, randomly indenting your code makes is extremely hard to read and follow the flow of the program. It's better to be consistent and follow a style.



        PEP8 - The Python style guide - recommends that four spaces per indentation level should be used:




        Use 4 spaces per indentation level.




        That is, each statement that is starting a new block and each subsequent statement in the new block, should be indented four spaces from the current indentation level. Here is the above program indented according to the PEP8 style guide:



        def perm(l):
        # Compute the list of all permutations of l
        if len(l) <= 1:
        return [l]
        r = []
        for i in range(len(l)):
        s = l[:i] + l[i+1:]
        p = perm(s)
        for x in p:
        r.append(l[i:i+1] + x)
        return r


        Can I still use tabs?



        Python realizes that some people still prefer tabs over spaces and that legacy code may use tabs rather than spaces, so it allows the use of tabs as indentation. PEP8 touches on this topic:




        Spaces are the preferred indentation method.



        Tabs should be used solely to remain consistent with code that is already indented with tabs.




        Note however the one big caveat is not to use both tabs and spaces for indentation. Doing so can cause all kinds of strange hard to debug indentation errors. Python expands tabs to the next 8th column, but if your editor is set to a tab size of 4 columns, or you you use spaces as well as tabs, you can easily produce indented code that looks fine in your editor, but Python will refuse to run. The Python 3 compiler explicitly rejects any program containing an ambiguous mixture of tabs and spaces, usually by raising a TabError. However, by default, mixing tabs and spaces is still allowed in Python 2, but it is highly recommended not to use this "feature". Use the -t and -tt command line flags to force Python 2 to raise a warning or (preferably) an error respectively. PEP8 also discusses this topic:




        Python 3 disallows mixing the use of tabs and spaces for indentation.



        Python 2 code indented with a mixture of tabs and spaces should be converted to using spaces exclusively.



        When invoking the Python 2 command line interpreter with the -t option, it issues warnings about code that illegally mixes tabs and spaces. When using -tt these warnings become errors. These options are highly recommended!




        What does "IndentationError: unexpected indent" mean?



        Problem



        This error occurs when a statement is unnecessarily indented or its indentation does not match the indentation of former statements in the same block. For example, the first statement in the program below is unnecessarily indented:



        >>> print('Hello') # this is indented 
        File "<stdin>", line 1
        print('Hello') # this is indented
        ^
        IndentationError: unexpected indent


        In this example, the can_drive = True line in the if block does not match the indentation of any former statement:



        >>> age = 10
        >>> can_drive = None
        >>>
        >>> if age >= 18:
        ... print('You can drive')
        ... can_drive = True # incorrectly indented
        File "<stdin>", line 3
        can_drive = True # incorrectly indented
        ^
        IndentationError: unexpected indent


        Fix



        The fix for this error is to first make sure the problematic line even needs to be indented. For example, the above example using print can be fixed simply be unindenting the line:



        >>> print('Hello') # simply unindent the line
        Hello


        However, if you are sure the line does need to be indented, the indentation needs to match that of a former statement in the same block. In the second example above using if, we can fix the error by making sure the line with can_drive = True is indented at the same level as the former statements in the if body:



        >>> age = 10
        >>> can_drive = None
        >>>
        >>> if age >= 18:
        ... print('You can drive')
        ... can_drive = True # indent this line at the same level.
        ...


        What does "IndentationError: expected an indented block" mean?



        Problem



        This error occurs when Python sees the 'header' for a compound statement, such as if <condition>: or while <condition>: but the compound statement's body or block is never defined. For example in the code below we began an if statement, but we never define a body for the statement:



        >>> if True:
        ...
        File "<stdin>", line 2

        ^
        IndentationError: expected an indented block


        In this second example, we began writing a for loop, but we forget to indent the for loop body. So Python still expects an indented block for the for loop body:



        >>> names = ['sarah', 'lucy', 'michael']
        >>> for name in names:
        ... print(name)
        File "<stdin>", line 2
        print(name)
        ^
        IndentationError: expected an indented block


        Comments don't count as bodies:



        >>> if True:
        ... # TODO
        ...
        File "<stdin>", line 3

        ^
        IndentationError: expected an indented block


        Fix



        The fix for this error is to simply include a body for the compound statement.



        As shown above, a common mistake by new users is that they forget to indent the body. If this is the case, make sure each statement meant to be included in the compound statement's body is indented at the same level under the compound statement's beginning. Here is the above example fixed:



        >>> names = ['sarah', 'lucy', 'michael']
        >>> for name in names:
        ... print(name) # The for loop body is now correctly indented.
        ...
        sarah
        lucy
        michael


        Another common case is that, for some reason, a user may not want to define an actual body for the compound statement, or the body may be commented out. In this case, the pass statement can be used. The pass statement can be used anywhere Python expects one or more statements as a placeholder. From the documentation for pass:




        pass is a null operation — when it is executed, nothing happens. It is useful as a placeholder when a statement is required syntactically, but no code needs to be executed, for example:



        def f(arg): pass # a function that does nothing (yet)

        class C: pass # a class with no methods (yet)



        Here is the above example with the if statement fixed by using the pass keyword:



        >>> if True:
        ... pass # We don't want to define a body.
        ...
        >>>


        What does "IndentationError: unindent does not match any outer indentation level" mean?



        Problem



        This error occurs when you unindent a statement, but now the indentation level of that statement does not match that of any former statement. For example, in the below code we unindent the second call to print. However, the indentation level does not match that of any former statement:



        >>> if True:
        ... if True:
        ... print('yes')
        ... print()
        File "<stdin>", line 4
        print()
        ^
        IndentationError: unindent does not match any outer indentation level


        This error is especially hard to catch because even one space will cause your code to fail.



        Fix



        The fix is to ensure that when you unindent a statement, the indentation level matches that of a former statement. Consider the above example once again. In the example, I want the second call to print to be in the first if statements body. So I need to make sure that that line's indentation level matches that of the former statements in the first if statement's body:



        >>> if True:
        ... if True:
        ... print('yes')
        ... print() # indentation level now matches former statement's level.
        ...
        yes

        >>>


        I'm still getting an IndentationError but my program appears to be correctly indented. What do I do?



        If your program visually appears to have correct indentation, but your still getting an IndentationError you have most likely mixed tabs with spaces. This will sometimes cause Python to raises strange errors. See the subsection Special cases under What does "TabError: inconsistent use of tabs and spaces in indentation" mean? for an more in-depth explanation of the problem.



        What does "TabError: inconsistent use of tabs and spaces in indentation" mean?



        Problem



        This error only occurs when you attempt to mix tabs and spaces as indentation characters. As said above, Python will not allow your program to contain a mix of tabs and spaces, and will raise the specific exception TabError if it finds you have. For example, in the program below, a mix of tabs and spaces is used for indentation:



        >>> if True:
        ... if True:
        ... print()
        ... print()
        ... print()
        File "<stdin>", line 5
        print()
        ^
        TabError: inconsistent use of tabs and spaces in indentation


        Here is a picture which visually shows the whitespace in the above program. Gray dots are spaces, and gray arrows are tabs:



        enter image description here



        We can see we have indeed mixed spaces and tabs for indentation.



        Special cases



        Note Python will not always raise a TabError if you mix tabs and spaces into your program. If the program indentation is unambiguous, Python will allow tabs and spaces to be mixed. For example:



        >>> if True:
        ... if True: # tab
        ... pass # tab, then 4 spaces
        ...
        >>>


        And sometimes Python simply chokes on the mixture of tabs and spaces and erroneously raises an IndentationError exception when a TabError would be more appropriate. Another example:



        >>> if True:
        ... pass # tab
        ... pass # 4 spaces
        File "<stdin>", line 3
        pass # 4 spaces
        ^
        IndentationError: unindent does not match any outer indentation level


        As you can see, running your code this way can create mysterious errors. Even though the program visually appears to be fine, Python became confused trying to parse the tabs and spaces used for indention and errored out.



        These are excellent examples that demonstrate why to never mix tabs and spaces and make use of the -t and -tt interpreter flags when using Python 2.



        Fix



        If your program is short, probably the easiest and quickest fix is to simply re-indent the program. Make sure each statement is indented by four spaces per indention level (see How do I indent my code?).



        However, if you already have a large program that you've mixed tabs and spaces into, there are automated tools that can be used to convert all of your indentation to just spaces.



        Many editors such as PyCharm and SublimeText have options to automatically convert tabs to spaces. There are also several on-line tools such as Tabs To Spaces or Browserling that allow you to quickly re-indent your code. There are also tools written in Python. autopep8 for example can automatically re-indent your code and other indentation errors as well.



        Even the best tools though will sometimes not be able to fix all of your indentation errors and you'll have to fix them manually. That's why it's important to always properly indent your code from the start.



        A note about "SyntaxError" related indentation problems



        Although not often, sometimes certain SyntaxError exceptions are raised due to incorrect indentation. For example, look at the code below:



        if True:
        pass
        pass # oops! this statement should be indented!.
        else:
        pass


        When the above code is run, a SyntaxError is raised:



        Traceback (most recent call last):
        File "python", line 4
        else:
        ^
        SyntaxError: invalid syntax


        Although Python raises a SyntaxError, the real problem with the above code, is that the second pass statement should be indented. Because the second pass isn't indented, Python doesn't realize that the previous if statement and the else statement are meant to be connected.



        The fix for this type of error is to simply correctly re-indent your code. To see how to properly indent your code, see the section How do I indent my code?.



        I'm still having a hard time with Python's indentation syntax. What do I do?



        Don't get discouraged if you're still struggling. It can take time to get use to
        Python's whitespace syntax rules. Here are some tips to help:



        • Get an editor that will tell you when you have an indentation error. Some goods ones are as said above are, PyCharm, SublimeText, and Jupyter Notebook.

        • When you indent your code, count out loud to yourself how many times you press the space-bar (or tab key). For example, if you needed to indent a line by four spaces, you would say out loud "one, two, three, four" while simultaneously pressing the space-bar each time. It sounds silly, but it helps train your brain to think about how deep you're indenting your code.

        • If you have an editor, see if it has an option to automatically convert tabs to spaces.

        • View others' code. Browse github or Stackoverflow and see examples of Python code.

        • Just write code. That's the single best way to get better. The more you write Python code, the better you'll get.

        Resources used



        • https://en.wikipedia.org/

        • https://docs.python.org/3/

        • http://python-history.blogspot.com/2009/02/early-language-design-and-development.html

        • https://www.python.org/dev/peps/pep-0008/





        share|improve this answer

























        • @user2357112 Ah, thanks for the edit. I did some test and it always seemed to raise a TabError but I wasn't 100% sure.

          – Christian Dean
          Aug 11 '17 at 17:11







        • 2





          Here's a demo of not-TabError, and here's a demo where Python doesn't raise an exception at all for mixed tabs and spaces because it considers the mixing unambiguous.

          – user2357112
          Aug 11 '17 at 17:16











        • Man you rocked this one!

          – blitu12345
          Jun 9 '18 at 9:53











        • @blitu12345 Thanks man, I appreciate the kind words!

          – Christian Dean
          Jun 9 '18 at 12:51













        52












        52








        52







        Why does indentation matter?



        In Python, indentation is used to delimit blocks of code. This is different from many other languages that use curly braces to delimit blocks such as Java, Javascript, and C. Because of this, Python users must pay close attention to when and how they indent their code because whitespace matters.



        When Python encounters a problem with the indentation of your program, it either raises an exception called IndentationError or TabError.



        A little history



        The historical reasons for why Python uses indentation vs the arguably more commonly accepted curly braces is outlined in an article of the history of Python by Guido van Rossum - the creator of Python:




        Python’s use of indentation comes directly from ABC, but this idea didn’t originate with ABC--it had already been promoted by Donald Knuth and was a well-known concept of programming style. (The occam programming language also used it.) However, ABC’s authors did invent the use of the colon that separates the lead-in clause from the indented block. After early user testing without the colon, it was discovered that the meaning of the indentation was unclear to beginners being taught the first steps of programming. The addition of the colon clarified it significantly: the colon somehow draws attention to what follows and ties the phrases before and after it together in just the right way.




        How do I indent my code?



        The basic rule for indenting Python code (considering that you treat the entire program as a "basic block") is: The first statement in a basic block, and each subsequent statement after it must be indented by the same amount.



        So technically the following Python program is correct:



        def perm(l):
        # Compute the list of all permutations of l
        if len(l) <= 1:
        return [l]
        r = []
        for i in range(len(l)):
        s = l[:i] + l[i+1:]
        p = perm(s)
        for x in p:
        r.append(l[i:i+1] + x)
        return r


        However, as you can probably tell from above, randomly indenting your code makes is extremely hard to read and follow the flow of the program. It's better to be consistent and follow a style.



        PEP8 - The Python style guide - recommends that four spaces per indentation level should be used:




        Use 4 spaces per indentation level.




        That is, each statement that is starting a new block and each subsequent statement in the new block, should be indented four spaces from the current indentation level. Here is the above program indented according to the PEP8 style guide:



        def perm(l):
        # Compute the list of all permutations of l
        if len(l) <= 1:
        return [l]
        r = []
        for i in range(len(l)):
        s = l[:i] + l[i+1:]
        p = perm(s)
        for x in p:
        r.append(l[i:i+1] + x)
        return r


        Can I still use tabs?



        Python realizes that some people still prefer tabs over spaces and that legacy code may use tabs rather than spaces, so it allows the use of tabs as indentation. PEP8 touches on this topic:




        Spaces are the preferred indentation method.



        Tabs should be used solely to remain consistent with code that is already indented with tabs.




        Note however the one big caveat is not to use both tabs and spaces for indentation. Doing so can cause all kinds of strange hard to debug indentation errors. Python expands tabs to the next 8th column, but if your editor is set to a tab size of 4 columns, or you you use spaces as well as tabs, you can easily produce indented code that looks fine in your editor, but Python will refuse to run. The Python 3 compiler explicitly rejects any program containing an ambiguous mixture of tabs and spaces, usually by raising a TabError. However, by default, mixing tabs and spaces is still allowed in Python 2, but it is highly recommended not to use this "feature". Use the -t and -tt command line flags to force Python 2 to raise a warning or (preferably) an error respectively. PEP8 also discusses this topic:




        Python 3 disallows mixing the use of tabs and spaces for indentation.



        Python 2 code indented with a mixture of tabs and spaces should be converted to using spaces exclusively.



        When invoking the Python 2 command line interpreter with the -t option, it issues warnings about code that illegally mixes tabs and spaces. When using -tt these warnings become errors. These options are highly recommended!




        What does "IndentationError: unexpected indent" mean?



        Problem



        This error occurs when a statement is unnecessarily indented or its indentation does not match the indentation of former statements in the same block. For example, the first statement in the program below is unnecessarily indented:



        >>> print('Hello') # this is indented 
        File "<stdin>", line 1
        print('Hello') # this is indented
        ^
        IndentationError: unexpected indent


        In this example, the can_drive = True line in the if block does not match the indentation of any former statement:



        >>> age = 10
        >>> can_drive = None
        >>>
        >>> if age >= 18:
        ... print('You can drive')
        ... can_drive = True # incorrectly indented
        File "<stdin>", line 3
        can_drive = True # incorrectly indented
        ^
        IndentationError: unexpected indent


        Fix



        The fix for this error is to first make sure the problematic line even needs to be indented. For example, the above example using print can be fixed simply be unindenting the line:



        >>> print('Hello') # simply unindent the line
        Hello


        However, if you are sure the line does need to be indented, the indentation needs to match that of a former statement in the same block. In the second example above using if, we can fix the error by making sure the line with can_drive = True is indented at the same level as the former statements in the if body:



        >>> age = 10
        >>> can_drive = None
        >>>
        >>> if age >= 18:
        ... print('You can drive')
        ... can_drive = True # indent this line at the same level.
        ...


        What does "IndentationError: expected an indented block" mean?



        Problem



        This error occurs when Python sees the 'header' for a compound statement, such as if <condition>: or while <condition>: but the compound statement's body or block is never defined. For example in the code below we began an if statement, but we never define a body for the statement:



        >>> if True:
        ...
        File "<stdin>", line 2

        ^
        IndentationError: expected an indented block


        In this second example, we began writing a for loop, but we forget to indent the for loop body. So Python still expects an indented block for the for loop body:



        >>> names = ['sarah', 'lucy', 'michael']
        >>> for name in names:
        ... print(name)
        File "<stdin>", line 2
        print(name)
        ^
        IndentationError: expected an indented block


        Comments don't count as bodies:



        >>> if True:
        ... # TODO
        ...
        File "<stdin>", line 3

        ^
        IndentationError: expected an indented block


        Fix



        The fix for this error is to simply include a body for the compound statement.



        As shown above, a common mistake by new users is that they forget to indent the body. If this is the case, make sure each statement meant to be included in the compound statement's body is indented at the same level under the compound statement's beginning. Here is the above example fixed:



        >>> names = ['sarah', 'lucy', 'michael']
        >>> for name in names:
        ... print(name) # The for loop body is now correctly indented.
        ...
        sarah
        lucy
        michael


        Another common case is that, for some reason, a user may not want to define an actual body for the compound statement, or the body may be commented out. In this case, the pass statement can be used. The pass statement can be used anywhere Python expects one or more statements as a placeholder. From the documentation for pass:




        pass is a null operation — when it is executed, nothing happens. It is useful as a placeholder when a statement is required syntactically, but no code needs to be executed, for example:



        def f(arg): pass # a function that does nothing (yet)

        class C: pass # a class with no methods (yet)



        Here is the above example with the if statement fixed by using the pass keyword:



        >>> if True:
        ... pass # We don't want to define a body.
        ...
        >>>


        What does "IndentationError: unindent does not match any outer indentation level" mean?



        Problem



        This error occurs when you unindent a statement, but now the indentation level of that statement does not match that of any former statement. For example, in the below code we unindent the second call to print. However, the indentation level does not match that of any former statement:



        >>> if True:
        ... if True:
        ... print('yes')
        ... print()
        File "<stdin>", line 4
        print()
        ^
        IndentationError: unindent does not match any outer indentation level


        This error is especially hard to catch because even one space will cause your code to fail.



        Fix



        The fix is to ensure that when you unindent a statement, the indentation level matches that of a former statement. Consider the above example once again. In the example, I want the second call to print to be in the first if statements body. So I need to make sure that that line's indentation level matches that of the former statements in the first if statement's body:



        >>> if True:
        ... if True:
        ... print('yes')
        ... print() # indentation level now matches former statement's level.
        ...
        yes

        >>>


        I'm still getting an IndentationError but my program appears to be correctly indented. What do I do?



        If your program visually appears to have correct indentation, but your still getting an IndentationError you have most likely mixed tabs with spaces. This will sometimes cause Python to raises strange errors. See the subsection Special cases under What does "TabError: inconsistent use of tabs and spaces in indentation" mean? for an more in-depth explanation of the problem.



        What does "TabError: inconsistent use of tabs and spaces in indentation" mean?



        Problem



        This error only occurs when you attempt to mix tabs and spaces as indentation characters. As said above, Python will not allow your program to contain a mix of tabs and spaces, and will raise the specific exception TabError if it finds you have. For example, in the program below, a mix of tabs and spaces is used for indentation:



        >>> if True:
        ... if True:
        ... print()
        ... print()
        ... print()
        File "<stdin>", line 5
        print()
        ^
        TabError: inconsistent use of tabs and spaces in indentation


        Here is a picture which visually shows the whitespace in the above program. Gray dots are spaces, and gray arrows are tabs:



        enter image description here



        We can see we have indeed mixed spaces and tabs for indentation.



        Special cases



        Note Python will not always raise a TabError if you mix tabs and spaces into your program. If the program indentation is unambiguous, Python will allow tabs and spaces to be mixed. For example:



        >>> if True:
        ... if True: # tab
        ... pass # tab, then 4 spaces
        ...
        >>>


        And sometimes Python simply chokes on the mixture of tabs and spaces and erroneously raises an IndentationError exception when a TabError would be more appropriate. Another example:



        >>> if True:
        ... pass # tab
        ... pass # 4 spaces
        File "<stdin>", line 3
        pass # 4 spaces
        ^
        IndentationError: unindent does not match any outer indentation level


        As you can see, running your code this way can create mysterious errors. Even though the program visually appears to be fine, Python became confused trying to parse the tabs and spaces used for indention and errored out.



        These are excellent examples that demonstrate why to never mix tabs and spaces and make use of the -t and -tt interpreter flags when using Python 2.



        Fix



        If your program is short, probably the easiest and quickest fix is to simply re-indent the program. Make sure each statement is indented by four spaces per indention level (see How do I indent my code?).



        However, if you already have a large program that you've mixed tabs and spaces into, there are automated tools that can be used to convert all of your indentation to just spaces.



        Many editors such as PyCharm and SublimeText have options to automatically convert tabs to spaces. There are also several on-line tools such as Tabs To Spaces or Browserling that allow you to quickly re-indent your code. There are also tools written in Python. autopep8 for example can automatically re-indent your code and other indentation errors as well.



        Even the best tools though will sometimes not be able to fix all of your indentation errors and you'll have to fix them manually. That's why it's important to always properly indent your code from the start.



        A note about "SyntaxError" related indentation problems



        Although not often, sometimes certain SyntaxError exceptions are raised due to incorrect indentation. For example, look at the code below:



        if True:
        pass
        pass # oops! this statement should be indented!.
        else:
        pass


        When the above code is run, a SyntaxError is raised:



        Traceback (most recent call last):
        File "python", line 4
        else:
        ^
        SyntaxError: invalid syntax


        Although Python raises a SyntaxError, the real problem with the above code, is that the second pass statement should be indented. Because the second pass isn't indented, Python doesn't realize that the previous if statement and the else statement are meant to be connected.



        The fix for this type of error is to simply correctly re-indent your code. To see how to properly indent your code, see the section How do I indent my code?.



        I'm still having a hard time with Python's indentation syntax. What do I do?



        Don't get discouraged if you're still struggling. It can take time to get use to
        Python's whitespace syntax rules. Here are some tips to help:



        • Get an editor that will tell you when you have an indentation error. Some goods ones are as said above are, PyCharm, SublimeText, and Jupyter Notebook.

        • When you indent your code, count out loud to yourself how many times you press the space-bar (or tab key). For example, if you needed to indent a line by four spaces, you would say out loud "one, two, three, four" while simultaneously pressing the space-bar each time. It sounds silly, but it helps train your brain to think about how deep you're indenting your code.

        • If you have an editor, see if it has an option to automatically convert tabs to spaces.

        • View others' code. Browse github or Stackoverflow and see examples of Python code.

        • Just write code. That's the single best way to get better. The more you write Python code, the better you'll get.

        Resources used



        • https://en.wikipedia.org/

        • https://docs.python.org/3/

        • http://python-history.blogspot.com/2009/02/early-language-design-and-development.html

        • https://www.python.org/dev/peps/pep-0008/





        share|improve this answer















        Why does indentation matter?



        In Python, indentation is used to delimit blocks of code. This is different from many other languages that use curly braces to delimit blocks such as Java, Javascript, and C. Because of this, Python users must pay close attention to when and how they indent their code because whitespace matters.



        When Python encounters a problem with the indentation of your program, it either raises an exception called IndentationError or TabError.



        A little history



        The historical reasons for why Python uses indentation vs the arguably more commonly accepted curly braces is outlined in an article of the history of Python by Guido van Rossum - the creator of Python:




        Python’s use of indentation comes directly from ABC, but this idea didn’t originate with ABC--it had already been promoted by Donald Knuth and was a well-known concept of programming style. (The occam programming language also used it.) However, ABC’s authors did invent the use of the colon that separates the lead-in clause from the indented block. After early user testing without the colon, it was discovered that the meaning of the indentation was unclear to beginners being taught the first steps of programming. The addition of the colon clarified it significantly: the colon somehow draws attention to what follows and ties the phrases before and after it together in just the right way.




        How do I indent my code?



        The basic rule for indenting Python code (considering that you treat the entire program as a "basic block") is: The first statement in a basic block, and each subsequent statement after it must be indented by the same amount.



        So technically the following Python program is correct:



        def perm(l):
        # Compute the list of all permutations of l
        if len(l) <= 1:
        return [l]
        r = []
        for i in range(len(l)):
        s = l[:i] + l[i+1:]
        p = perm(s)
        for x in p:
        r.append(l[i:i+1] + x)
        return r


        However, as you can probably tell from above, randomly indenting your code makes is extremely hard to read and follow the flow of the program. It's better to be consistent and follow a style.



        PEP8 - The Python style guide - recommends that four spaces per indentation level should be used:




        Use 4 spaces per indentation level.




        That is, each statement that is starting a new block and each subsequent statement in the new block, should be indented four spaces from the current indentation level. Here is the above program indented according to the PEP8 style guide:



        def perm(l):
        # Compute the list of all permutations of l
        if len(l) <= 1:
        return [l]
        r = []
        for i in range(len(l)):
        s = l[:i] + l[i+1:]
        p = perm(s)
        for x in p:
        r.append(l[i:i+1] + x)
        return r


        Can I still use tabs?



        Python realizes that some people still prefer tabs over spaces and that legacy code may use tabs rather than spaces, so it allows the use of tabs as indentation. PEP8 touches on this topic:




        Spaces are the preferred indentation method.



        Tabs should be used solely to remain consistent with code that is already indented with tabs.




        Note however the one big caveat is not to use both tabs and spaces for indentation. Doing so can cause all kinds of strange hard to debug indentation errors. Python expands tabs to the next 8th column, but if your editor is set to a tab size of 4 columns, or you you use spaces as well as tabs, you can easily produce indented code that looks fine in your editor, but Python will refuse to run. The Python 3 compiler explicitly rejects any program containing an ambiguous mixture of tabs and spaces, usually by raising a TabError. However, by default, mixing tabs and spaces is still allowed in Python 2, but it is highly recommended not to use this "feature". Use the -t and -tt command line flags to force Python 2 to raise a warning or (preferably) an error respectively. PEP8 also discusses this topic:




        Python 3 disallows mixing the use of tabs and spaces for indentation.



        Python 2 code indented with a mixture of tabs and spaces should be converted to using spaces exclusively.



        When invoking the Python 2 command line interpreter with the -t option, it issues warnings about code that illegally mixes tabs and spaces. When using -tt these warnings become errors. These options are highly recommended!




        What does "IndentationError: unexpected indent" mean?



        Problem



        This error occurs when a statement is unnecessarily indented or its indentation does not match the indentation of former statements in the same block. For example, the first statement in the program below is unnecessarily indented:



        >>> print('Hello') # this is indented 
        File "<stdin>", line 1
        print('Hello') # this is indented
        ^
        IndentationError: unexpected indent


        In this example, the can_drive = True line in the if block does not match the indentation of any former statement:



        >>> age = 10
        >>> can_drive = None
        >>>
        >>> if age >= 18:
        ... print('You can drive')
        ... can_drive = True # incorrectly indented
        File "<stdin>", line 3
        can_drive = True # incorrectly indented
        ^
        IndentationError: unexpected indent


        Fix



        The fix for this error is to first make sure the problematic line even needs to be indented. For example, the above example using print can be fixed simply be unindenting the line:



        >>> print('Hello') # simply unindent the line
        Hello


        However, if you are sure the line does need to be indented, the indentation needs to match that of a former statement in the same block. In the second example above using if, we can fix the error by making sure the line with can_drive = True is indented at the same level as the former statements in the if body:



        >>> age = 10
        >>> can_drive = None
        >>>
        >>> if age >= 18:
        ... print('You can drive')
        ... can_drive = True # indent this line at the same level.
        ...


        What does "IndentationError: expected an indented block" mean?



        Problem



        This error occurs when Python sees the 'header' for a compound statement, such as if <condition>: or while <condition>: but the compound statement's body or block is never defined. For example in the code below we began an if statement, but we never define a body for the statement:



        >>> if True:
        ...
        File "<stdin>", line 2

        ^
        IndentationError: expected an indented block


        In this second example, we began writing a for loop, but we forget to indent the for loop body. So Python still expects an indented block for the for loop body:



        >>> names = ['sarah', 'lucy', 'michael']
        >>> for name in names:
        ... print(name)
        File "<stdin>", line 2
        print(name)
        ^
        IndentationError: expected an indented block


        Comments don't count as bodies:



        >>> if True:
        ... # TODO
        ...
        File "<stdin>", line 3

        ^
        IndentationError: expected an indented block


        Fix



        The fix for this error is to simply include a body for the compound statement.



        As shown above, a common mistake by new users is that they forget to indent the body. If this is the case, make sure each statement meant to be included in the compound statement's body is indented at the same level under the compound statement's beginning. Here is the above example fixed:



        >>> names = ['sarah', 'lucy', 'michael']
        >>> for name in names:
        ... print(name) # The for loop body is now correctly indented.
        ...
        sarah
        lucy
        michael


        Another common case is that, for some reason, a user may not want to define an actual body for the compound statement, or the body may be commented out. In this case, the pass statement can be used. The pass statement can be used anywhere Python expects one or more statements as a placeholder. From the documentation for pass:




        pass is a null operation — when it is executed, nothing happens. It is useful as a placeholder when a statement is required syntactically, but no code needs to be executed, for example:



        def f(arg): pass # a function that does nothing (yet)

        class C: pass # a class with no methods (yet)



        Here is the above example with the if statement fixed by using the pass keyword:



        >>> if True:
        ... pass # We don't want to define a body.
        ...
        >>>


        What does "IndentationError: unindent does not match any outer indentation level" mean?



        Problem



        This error occurs when you unindent a statement, but now the indentation level of that statement does not match that of any former statement. For example, in the below code we unindent the second call to print. However, the indentation level does not match that of any former statement:



        >>> if True:
        ... if True:
        ... print('yes')
        ... print()
        File "<stdin>", line 4
        print()
        ^
        IndentationError: unindent does not match any outer indentation level


        This error is especially hard to catch because even one space will cause your code to fail.



        Fix



        The fix is to ensure that when you unindent a statement, the indentation level matches that of a former statement. Consider the above example once again. In the example, I want the second call to print to be in the first if statements body. So I need to make sure that that line's indentation level matches that of the former statements in the first if statement's body:



        >>> if True:
        ... if True:
        ... print('yes')
        ... print() # indentation level now matches former statement's level.
        ...
        yes

        >>>


        I'm still getting an IndentationError but my program appears to be correctly indented. What do I do?



        If your program visually appears to have correct indentation, but your still getting an IndentationError you have most likely mixed tabs with spaces. This will sometimes cause Python to raises strange errors. See the subsection Special cases under What does "TabError: inconsistent use of tabs and spaces in indentation" mean? for an more in-depth explanation of the problem.



        What does "TabError: inconsistent use of tabs and spaces in indentation" mean?



        Problem



        This error only occurs when you attempt to mix tabs and spaces as indentation characters. As said above, Python will not allow your program to contain a mix of tabs and spaces, and will raise the specific exception TabError if it finds you have. For example, in the program below, a mix of tabs and spaces is used for indentation:



        >>> if True:
        ... if True:
        ... print()
        ... print()
        ... print()
        File "<stdin>", line 5
        print()
        ^
        TabError: inconsistent use of tabs and spaces in indentation


        Here is a picture which visually shows the whitespace in the above program. Gray dots are spaces, and gray arrows are tabs:



        enter image description here



        We can see we have indeed mixed spaces and tabs for indentation.



        Special cases



        Note Python will not always raise a TabError if you mix tabs and spaces into your program. If the program indentation is unambiguous, Python will allow tabs and spaces to be mixed. For example:



        >>> if True:
        ... if True: # tab
        ... pass # tab, then 4 spaces
        ...
        >>>


        And sometimes Python simply chokes on the mixture of tabs and spaces and erroneously raises an IndentationError exception when a TabError would be more appropriate. Another example:



        >>> if True:
        ... pass # tab
        ... pass # 4 spaces
        File "<stdin>", line 3
        pass # 4 spaces
        ^
        IndentationError: unindent does not match any outer indentation level


        As you can see, running your code this way can create mysterious errors. Even though the program visually appears to be fine, Python became confused trying to parse the tabs and spaces used for indention and errored out.



        These are excellent examples that demonstrate why to never mix tabs and spaces and make use of the -t and -tt interpreter flags when using Python 2.



        Fix



        If your program is short, probably the easiest and quickest fix is to simply re-indent the program. Make sure each statement is indented by four spaces per indention level (see How do I indent my code?).



        However, if you already have a large program that you've mixed tabs and spaces into, there are automated tools that can be used to convert all of your indentation to just spaces.



        Many editors such as PyCharm and SublimeText have options to automatically convert tabs to spaces. There are also several on-line tools such as Tabs To Spaces or Browserling that allow you to quickly re-indent your code. There are also tools written in Python. autopep8 for example can automatically re-indent your code and other indentation errors as well.



        Even the best tools though will sometimes not be able to fix all of your indentation errors and you'll have to fix them manually. That's why it's important to always properly indent your code from the start.



        A note about "SyntaxError" related indentation problems



        Although not often, sometimes certain SyntaxError exceptions are raised due to incorrect indentation. For example, look at the code below:



        if True:
        pass
        pass # oops! this statement should be indented!.
        else:
        pass


        When the above code is run, a SyntaxError is raised:



        Traceback (most recent call last):
        File "python", line 4
        else:
        ^
        SyntaxError: invalid syntax


        Although Python raises a SyntaxError, the real problem with the above code, is that the second pass statement should be indented. Because the second pass isn't indented, Python doesn't realize that the previous if statement and the else statement are meant to be connected.



        The fix for this type of error is to simply correctly re-indent your code. To see how to properly indent your code, see the section How do I indent my code?.



        I'm still having a hard time with Python's indentation syntax. What do I do?



        Don't get discouraged if you're still struggling. It can take time to get use to
        Python's whitespace syntax rules. Here are some tips to help:



        • Get an editor that will tell you when you have an indentation error. Some goods ones are as said above are, PyCharm, SublimeText, and Jupyter Notebook.

        • When you indent your code, count out loud to yourself how many times you press the space-bar (or tab key). For example, if you needed to indent a line by four spaces, you would say out loud "one, two, three, four" while simultaneously pressing the space-bar each time. It sounds silly, but it helps train your brain to think about how deep you're indenting your code.

        • If you have an editor, see if it has an option to automatically convert tabs to spaces.

        • View others' code. Browse github or Stackoverflow and see examples of Python code.

        • Just write code. That's the single best way to get better. The more you write Python code, the better you'll get.

        Resources used



        • https://en.wikipedia.org/

        • https://docs.python.org/3/

        • http://python-history.blogspot.com/2009/02/early-language-design-and-development.html

        • https://www.python.org/dev/peps/pep-0008/






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Jul 8 '18 at 10:46









        Martijn Pieters

        732k14725712363




        732k14725712363










        answered Aug 10 '17 at 19:06









        Christian DeanChristian Dean

        15.9k62860




        15.9k62860












        • @user2357112 Ah, thanks for the edit. I did some test and it always seemed to raise a TabError but I wasn't 100% sure.

          – Christian Dean
          Aug 11 '17 at 17:11







        • 2





          Here's a demo of not-TabError, and here's a demo where Python doesn't raise an exception at all for mixed tabs and spaces because it considers the mixing unambiguous.

          – user2357112
          Aug 11 '17 at 17:16











        • Man you rocked this one!

          – blitu12345
          Jun 9 '18 at 9:53











        • @blitu12345 Thanks man, I appreciate the kind words!

          – Christian Dean
          Jun 9 '18 at 12:51

















        • @user2357112 Ah, thanks for the edit. I did some test and it always seemed to raise a TabError but I wasn't 100% sure.

          – Christian Dean
          Aug 11 '17 at 17:11







        • 2





          Here's a demo of not-TabError, and here's a demo where Python doesn't raise an exception at all for mixed tabs and spaces because it considers the mixing unambiguous.

          – user2357112
          Aug 11 '17 at 17:16











        • Man you rocked this one!

          – blitu12345
          Jun 9 '18 at 9:53











        • @blitu12345 Thanks man, I appreciate the kind words!

          – Christian Dean
          Jun 9 '18 at 12:51
















        @user2357112 Ah, thanks for the edit. I did some test and it always seemed to raise a TabError but I wasn't 100% sure.

        – Christian Dean
        Aug 11 '17 at 17:11






        @user2357112 Ah, thanks for the edit. I did some test and it always seemed to raise a TabError but I wasn't 100% sure.

        – Christian Dean
        Aug 11 '17 at 17:11





        2




        2





        Here's a demo of not-TabError, and here's a demo where Python doesn't raise an exception at all for mixed tabs and spaces because it considers the mixing unambiguous.

        – user2357112
        Aug 11 '17 at 17:16





        Here's a demo of not-TabError, and here's a demo where Python doesn't raise an exception at all for mixed tabs and spaces because it considers the mixing unambiguous.

        – user2357112
        Aug 11 '17 at 17:16













        Man you rocked this one!

        – blitu12345
        Jun 9 '18 at 9:53





        Man you rocked this one!

        – blitu12345
        Jun 9 '18 at 9:53













        @blitu12345 Thanks man, I appreciate the kind words!

        – Christian Dean
        Jun 9 '18 at 12:51





        @blitu12345 Thanks man, I appreciate the kind words!

        – Christian Dean
        Jun 9 '18 at 12:51













        2














        Sublime Text 3



        If it happens that you code in Sublime Text 3, this could help you with indentations problemes



        In Sublime Text, while editing a Python file:



        Sublime Text menu > Preferences > Settings - Syntax Specific :



        Python.sublime-settings




        "tab_size": 4,
        "translate_tabs_to_spaces": true






        share|improve this answer



























          2














          Sublime Text 3



          If it happens that you code in Sublime Text 3, this could help you with indentations problemes



          In Sublime Text, while editing a Python file:



          Sublime Text menu > Preferences > Settings - Syntax Specific :



          Python.sublime-settings




          "tab_size": 4,
          "translate_tabs_to_spaces": true






          share|improve this answer

























            2












            2








            2







            Sublime Text 3



            If it happens that you code in Sublime Text 3, this could help you with indentations problemes



            In Sublime Text, while editing a Python file:



            Sublime Text menu > Preferences > Settings - Syntax Specific :



            Python.sublime-settings




            "tab_size": 4,
            "translate_tabs_to_spaces": true






            share|improve this answer













            Sublime Text 3



            If it happens that you code in Sublime Text 3, this could help you with indentations problemes



            In Sublime Text, while editing a Python file:



            Sublime Text menu > Preferences > Settings - Syntax Specific :



            Python.sublime-settings




            "tab_size": 4,
            "translate_tabs_to_spaces": true







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Aug 5 '18 at 13:42









            chebabychebaby

            1,7302020




            1,7302020





















                0














                You see, you have a tiny error.



                if True:
                if False:
                print('foo')
                print('bar')


                You were supposed to do:



                if True:
                if False:
                print('foo')
                print('bar')


                As you can see your print is only indented 3 spaces, it is supposed to be indented 4 spaces.






                share|improve this answer



























                  0














                  You see, you have a tiny error.



                  if True:
                  if False:
                  print('foo')
                  print('bar')


                  You were supposed to do:



                  if True:
                  if False:
                  print('foo')
                  print('bar')


                  As you can see your print is only indented 3 spaces, it is supposed to be indented 4 spaces.






                  share|improve this answer

























                    0












                    0








                    0







                    You see, you have a tiny error.



                    if True:
                    if False:
                    print('foo')
                    print('bar')


                    You were supposed to do:



                    if True:
                    if False:
                    print('foo')
                    print('bar')


                    As you can see your print is only indented 3 spaces, it is supposed to be indented 4 spaces.






                    share|improve this answer













                    You see, you have a tiny error.



                    if True:
                    if False:
                    print('foo')
                    print('bar')


                    You were supposed to do:



                    if True:
                    if False:
                    print('foo')
                    print('bar')


                    As you can see your print is only indented 3 spaces, it is supposed to be indented 4 spaces.







                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered Jul 19 '18 at 3:34









                    The CoderThe Coder

                    246




                    246





















                        0














                        Quick fix for Sublime users:



                        1. Press Ctrl-H to access Find and Replace

                        2. In Find: Type 4 spaces

                        3. In Replace: Copy and paste a tab from somewhere in your code
                          Click Replace All





                        share|improve this answer



























                          0














                          Quick fix for Sublime users:



                          1. Press Ctrl-H to access Find and Replace

                          2. In Find: Type 4 spaces

                          3. In Replace: Copy and paste a tab from somewhere in your code
                            Click Replace All





                          share|improve this answer

























                            0












                            0








                            0







                            Quick fix for Sublime users:



                            1. Press Ctrl-H to access Find and Replace

                            2. In Find: Type 4 spaces

                            3. In Replace: Copy and paste a tab from somewhere in your code
                              Click Replace All





                            share|improve this answer













                            Quick fix for Sublime users:



                            1. Press Ctrl-H to access Find and Replace

                            2. In Find: Type 4 spaces

                            3. In Replace: Copy and paste a tab from somewhere in your code
                              Click Replace All






                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered Jul 23 '18 at 16:37









                            Matthew ParkMatthew Park

                            7421511




                            7421511



























                                draft saved

                                draft discarded
















































                                Thanks for contributing an answer to Stack Overflow!


                                • Please be sure to answer the question. Provide details and share your research!

                                But avoid


                                • Asking for help, clarification, or responding to other answers.

                                • Making statements based on opinion; back them up with references or personal experience.

                                To learn more, see our tips on writing great answers.




                                draft saved


                                draft discarded














                                StackExchange.ready(
                                function ()
                                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f45621722%2fim-getting-an-indentationerror-how-do-i-fix-it%23new-answer', 'question_page');

                                );

                                Post as a guest















                                Required, but never shown





















































                                Required, but never shown














                                Required, but never shown












                                Required, but never shown







                                Required, but never shown

































                                Required, but never shown














                                Required, but never shown












                                Required, but never shown







                                Required, but never shown







                                Popular posts from this blog

                                Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

                                Swift 4 - func physicsWorld not invoked on collision? The Next CEO of Stack OverflowHow to call Objective-C code from Swift#ifdef replacement in the Swift language@selector() in Swift?#pragma mark in Swift?Swift for loop: for index, element in array?dispatch_after - GCD in Swift?Swift Beta performance: sorting arraysSplit a String into an array in Swift?The use of Swift 3 @objc inference in Swift 4 mode is deprecated?How to optimize UITableViewCell, because my UITableView lags

                                Access current req object everywhere in Node.js ExpressWhy are global variables considered bad practice? (node.js)Using req & res across functionsHow do I get the path to the current script with Node.js?What is Node.js' Connect, Express and “middleware”?Node.js w/ express error handling in callbackHow to access the GET parameters after “?” in Express?Modify Node.js req object parametersAccess “app” variable inside of ExpressJS/ConnectJS middleware?Node.js Express app - request objectAngular Http Module considered middleware?Session variables in ExpressJSAdd properties to the req object in expressjs with Typescript