rawkiwi
rawkiwi

Reputation: 13

finally: txt.close() SyntaxError in Python

I can not use finally:txt.close() to close a txt file. Please help me out. Thank you!

txt = open('temp5.txt','r')
for i in range(5):
    try:
        10/i-50
        print(i)
    except:
        print('error:', i)
        
finally:
    txt.close()

Error:

  File "C:\Users\91985\AppData\Local\Temp/ipykernel_12240/2698394632.py", line 9
    finally:
    ^
SyntaxError: invalid syntax

I was confused because this part was good without error:

txt = open('temp5.txt','r')
for i in range(5):
    try:
        10/i-50
        print(i)
    except:
        print('error:', i)

Output:

error: 0
1
2
3
4

Upvotes: -1

Views: 54

Answers (2)

Raed Ali
Raed Ali

Reputation: 587

Your try and except blocks exist only in your for loop and are executed for every iteration of the loop. Because of this, your finally block will not work as it has no try or except part. If you want to close the file after the loop, you can omit the finally block and just have txt.close() after the for loop:

txt = open('temp5.txt','r')
for i in range(5):
    try:
        10/i-50
        print(i)
    except:
        print('error:', i)
txt.close()

Additionally, you could also open the file using with to close it automatically:

with open("temp5.txt") as txt:
    for i in range(5):
        try:
            10/i-50
            print(i)
        except:
            print('error:', i)

Upvotes: 3

blunova
blunova

Reputation: 2532

Do you really need using open() and close()? I suggest you to use context managers, that will make your life easier:

with open("temp5.txt") as file:
    # Logic, exception handling, ...

Upvotes: 3

Related Questions