Why doesa this try block create an indent error - python

Started learning python and trying to learn try blocks. However I am utterly confused to why this program creates an unident error (does not match other identation levels).
while True:
try:
yes=(int(input("how smart is neervesh")))
if neervesh == 0:
print("yes is smart")
elif neervesh ==1:
print("yeas")
else:
print("kill me now")
except ValueError:
print("dont be retarded like yes")

Your try is indented by 3 spaces, your except by 4. You should stick to one indentation width (usually 4).

I always use the program 'SublimeText'. This text editor gives you the possibility to change your indentation on the fly. You can either convert your indentation to tabs or spaces. This way, you'll likely prevent future
indentation errors.

Related

problem with Python indentation with simple code, if, else

When I hit enter after typing else: to move to the next line, it gives error indentation, no matter how I align it, i tried 4 spaces, everything still not working. I made sure that else is aligned perfectly with if as in the book, but still error.
Can someone please explain to me how indentation works? I'm using Python 2.7
Code:
if x%2 == 0:
print "Even"
else:
print "Odd"
print "done with conditional"
Assume as if python has an reverse hierarchical structure like an inverted traingle.
when ever you want to write function/loop/conditions in 1st level, we write whatever the code we are writing inside those three sections in 2nd level.
In your code "if" and "else" comes in 1st level. so dont give any spaces infront of these.
print statements inside 'if' and 'else' should have same tab space or white space as they come under 2nd level.
outer print statement will not have a space because it again comes to 1st level.
Hope this helps
In Python console, everything works fine with a positive number of spaces, or a Tab;
so any of these example will work:
if True:
print('Hello')
else:
print('Not hello')
if True:
print('Hello')
else:
print('Not hello')
if True:
print('Hello')
else:
print('Not hello')
EDIT
For searching where is the problem, try this answer; call
python -m tabnanny <your_script>.py
and you will get an output telling you which lines are the problem.
Example output:
'test.py': Indentation Error: unindent does not match any outer indentation level (<tokenize>, line 12)

python identation error not expected

I am trying to solve this problem many times but I am not able to solve i tried everything but it shows error message everytime
a=int(input('enter the first number')) #we ask for input
b=int(input('enter the second number'))
while True:
choice=int(input('enter the number corresponding to the operation you want to \nperform \n1)addition \n2)subtraction \n3)multiplication \n4)division '))
#we ask for the user choice
if choice==1: #if the user opts for addition
addition=a+b
print(f'the addition of the 2 numbers is {addition} ') #ans
ans=input('want to try another operation? yes or no')
if ans=='yes': #if the user whishes to use another operation
continue
else: #if the user opts out
print('thank you for using')
break
elif choice==2:
subtraction=a-b #same for others but diffrent opperation
print(f'the subtraction of the 2 numbers is {subtraction} ')
ans=input('want to try another operation? yes or no')
if ans=='yes':
continue
else:
print('thank you for using')
break
elif choice==3:
multiplication=a*b
print(f'the multiplication of the 2 numbers is {multiplication} ')
ans=input('want to try another operation? yes or no')
if ans=='yes':
continue
else:
print('thank you for using')
break
else:
division=a//b
remainder=a%b
print(f'the division of the 2 numbers is {division} \nand the remainder is{remainder} ')
ans=input('want to try another operation? yes or no')
if ans=='yes':
continue
else:
print('thank you for using')
break
the error message is
File "calc_of_2_nos.py", line 15
break
^
IndentationError: unindent does not match any outer indentation level
I don't know how to solve this problem I think I have indentated it perfectly four spaces
This happens to me in Sublime Text sometimes if I mix up tabs and spaces. I am answering specifically for Sublime Text because that is what you say you are using in the comments.
In Sublime Text, when you highlight whitespace you can actually see if it is a tab or a space, like this:
Notice the two arrows on the left. Where you see dots, there are spaces, and where you see lines, there's a tab.
To make your spacing consistent, I recommend that you either go back through manually and delete and then manually and consistently re-indent your code, or use a linter to redo the indentation. Sublime Text provides some tools for this (view -> indentation -> *), and tools exist online.
Another trick in Sublime Text that can help is to search the file for tabs and replace them with (for spaces).
I could not find any error.You might want to add a newline after division in your menu choice, else its perfect!

Avoiding indentation in Python else and elif

In writing a Python code in Wing or IDLE, inside the if condition, we must have an indentation for each line. But the else and the elif part must be aligned with if. However when I type else: or elif: in a newline, it has an indentation and I must remove it manually. I have seen it in several IDEs like Wing.
Is there any way to avoid indentation for else and elif? Indeed I need this:
if (condition):
do this
else:
do this
But when I type it, it's like:
if (condition)
do this
else:
do this
You seem to believe the editor will somehow know how many lines the indented suites of code should have.
It would be easy to make editors "outdent" if those suites were all one line, but a cursory inspection of any moderately complex Python program will show that is clearly not the case.
Which means it's up to us to indicate the end by outdenting manually, usually with SHIFT-TAB, at the end of the clause.

python identation error (2.7.5)

im new in programming and i just started learning python (2.7.5) and im facing this indentation error, i've tried to change the position but still the same , and in the options is set automatically to 4 spaces. what should i do?
if temperature>60 and temperature<75:
print "just right!"
else:
File "<pyshell#8>", line 3
else:
^
IndentationError: unindent does not match any outer indentation level
you have to indent everything after the if line:
if temperature>60 and temperature<75:
print "just right!"
else:
print "not right!"
make sure that all the indents are of the same space width (standard is 4 spaces as you said).
Indentation errors happen when the indentation is of different width like so:
if temperature>60 and temperature<75:
print "just right!"
else:
print "not right!"
Note that no indentation is also an indentation level, like the if and the else in the above example.
As Serbitar said, indentation is extremely important in Python. As you don't use semi-colons like in other languages, Python pays particular attention to indentation.
It also encourages clean code. There are a few situations where indentation isn't important.
Eg:
class ClassName:
def method_name():
print("I am a really long string," \
"So where you indent the second line doesn't"\
"matter")
This also applies to method calls. If you are calling a method where the arguments are particularly long, it doesn't matter where you format the second line.
However, it's always recommended to format appropriately.
If you use the community edition of PyCharm, it helps a great deal with this issue.

Python unexpected indentaton error main()

I have no idea how to fix this. I've tried retyping the program.
I get an unexpected indentation error for the last main function.
resident = 81
nonresident = 162
def main():
# initialize counters and total tuition
resident_counter = 0
nonresident_counter = 0
total_tuition = 0
print("Name \tCode\tCredits\tTuition")
print
try:
# open the data file
infile = open('enroll.txt', 'r')
# read the first value from the file
student_name = infile.readline()
# continue reading from file until the end
while student_name != '':
# strip the new line character and print the student's name
student_name = student_name.rstrip('\n')
print(student_name, end='\t')
# read the code type, strip the new line, and print it
code = infile.readline()
code = code_type.rstrip('\n')
print(code_type, end='\t')
# read the number of credits, strip the new line, and print it
credits = infile.readline()
credits = int(credits)
print(format(credits, '3.0f'), end='\t')
# check the room type and compute the rental amount due
# increment the appropriate counter
if code_type == "R" or room_type == "r":
payment_due = credits * resident
resident_counter += 1
elif code_type == "N" or room_type == "n":
payment_due = credits * nonresident
nonresident_counter += 1
elif code_type != "R" or code_type != "r" or code_type != "N" or code_type != "n":
payment_due = 0
# accumulate the total room rent
tuition += payment_due
# print the appropriate detail line
if payment_due == 0:
print('invalid code')
else:
print('$', format(tuition, '8,.2f'))
# get the next studen't name
student_name = infile.readline()
# close the input file
infile.close()
# print the counters and payment total amount
print
print('total number of resident students: ', resident_counter)
print('total number of nonresident: ', nonresident_counter)
print
print('total students: ', end='')
print('$', format(tuition, ',.2f'))
# execute the main function
main()
You don't have an except clause to match the try.
Despite what everyone else is saying, if you have a try, you don't have to have an except: you must have an except or a finally.
That may seem nitpicky, but it's pretty plausible that the code you were copying was actually using finally (e.g., to make sure some cleanup code always gets run—given that it's doing C-/Java-style manual cleanup).
At any rate, adding an except clause is not the right answer. If you're actually looking to handle or ignore errors, then yes, add an except clause. If you're looking for somewhere to add cleanup code that gets run even on an error, add a finally clause instead. If you don't want either, just remove the try line.
you are mixing room type and code type in your if else statement. You are also missing your except statement. This should be your last two lines before calling main.
It should read:
except IOError:
print('an error occurred trying to open or read enroll.txt')
You are using the try statement. It means that you MUST have an except block
try:
some code
except:
pass
It is simplification, but will solve your problem.
The other answers have (correctly) pointed out that you need to have an except to go with your try: (or not use a try altogether). I'm going to try to explain how you could go about debugging similar issues in the future, since these can be very annoying to debug.
Your error message most likely looked something like this:
File "test.py", line 74
main()
^
IndentationError: unexpected unindent
At first glance, that doesn't seem too helpful, and it's definitely not very clear.
The fact that you "tried retyping the program" sounds like you saw IndentationError and thought, "this means my indents are messed up; maybe there's an extra space somewhere or a mixture of spaces and tabs or something." Those are definitely valid IndentationErrors, and retyping the program would fix them, if you didn't make the same typing error again. (On a side note, I believe that any text editor worth using will have the option to convert all of your tabs to 4 spaces to avoid a lot of indent headaches.)
However, looking at the error text, we see "unexpected unindent". To me this sounds kind of like gibberish, but what it means is that, when python was looking at your program, it ran into a line that it thought should be indented more than it was. (Unfortunately, this same kind of error can be called "unexpected unindent" or "expected an indented block", and it can even show up as a plain old SyntaxError: invalid syntax.)
So knowing what the error message means, we can look back through the code to see why python thought that main() was indented strangely- though we have to be careful because python isn't always right about where the problem actually is. Here would be something like my thought process:
There's a function definition right before main() is called, maybe that function wants main() to be inside it? No that isn't it, because python only really expects at least one line of code after a function definition.
What else "wants" code to be indented after it? if, elif, and while all do, but all of them have code after them as well.
The only other "indenter" is try:. At this point, you either know that try: needs to be followed by a except: or a finally: and you fix it, or you don't. If you don't know that, than you could still see that try: is followed by an indented block, and, given that it is a likely culprit for you error, decide that it's time to look up what try: does.
Well I hope that helps troubleshooting problems like this in the future, and check out abarnert's answer and my link for more on handling errors with try/except/else/finally statements.
As noted by LevLevitsky and david above, there's no except clause. The easiest way to solve this is adding a line like the following to your code before the call to main:
except: pass
The second comment I have to your code is more stylistic, but you could add the following, before your call to main and after the except clause:
if __name__ == '__main__':
main()
Besides the missing except or finally or the extra try... If you have a look at the edited code, you can see the strangely mixed color blocks in the indentation. It means that you are mixing tabs and spaces which can lead to problems like bad indentation. The reason is that the interpreter thinks differently about how the tabs should be interpreted (for example 8 vs. 4 column tab stops).
You must not mix tabs and spaces for the indentation. I personally would recommend to use only the spaces. Any decent editor is capable to expand TAB key to spaces and/or Untabify the existing mixture of tabs and spaces.

Categories