As far as I know, I've done the indentation right, I also tried the same code in another text editor, but it throws the same error.
It throws "IndentationError: " when I use try except with "with open('file_name', 'mode') as file_handler:"
python3 test2.py File "test2.py", line 9 except IOError: ^ IndentationError: expected an indented block
I learned similar articles, and it says indent consciously. I also tried with tab and 4 spaces, but it's not working either way. Maybe it's a stupid mistake that I'm not getting. Please help me, And I'd be grateful to get suggestions to do things better in this code so that I could learn something.
f_name = input("enter a file name:: ")
if f_name == 'na na boo boo':
print(f"\n{f_name} TO YOU - You have been punk'd!\n")
exit()
try:
with open(f_name, 'r') as f_hand:
except IOError:
print(f'File missing:: {f_name}.')
exit()
floating_points = []
for line in f_hand:
if line.startswith('X-DSPAM') :
start_index_pos = line.find(':')
start_index_pos = float(start_index_pos)
floating_points.append(start_index_pos)
print("The floating points are::\n")
for floating_point in floating_points:
print(floating_point)
print(f"There are {len(floating_points)} items on the list and they sum to {sum(floating_points)}.")
CodePudding user response:
You cannot interrupt the with
statement with the except
clause of the try
statement. It has to be completed first. Some of the code can be moved out of the with
statement and placed before or after (as appropriate) the try
statement
floating_points = []
try:
with open(f_name, 'r') as f_hand:
for line in f_hand:
if line.startswith('X-DSPAM') :
start_index_pos = line.find(':')
start_index_pos = float(start_index_pos)
floating_points.append(start_index_pos)
except FileNotFoundError:
print(f'File missing:: {f_name}.')
exit()
print("The floating points are::\n")
for floating_point in floating_points:
print(floating_point)
print(f"There are {len(floating_points)} items on the list and they sum to {sum(floating_points)}.")
CodePudding user response:
Your code is completely wrong, you don't use context manager just to open a file, for that, we have open(), we use with
as a context manager so that it'll take care of closing the file later automatically.
and the syntax is wrong, you can't just leave the with
statement hanging with a :
, the operations on the file must be inside the with indentation.
anyway here is the right code
f_name = input("enter a file name:: ")
if f_name == 'na na boo boo':
print(f"\n{f_name} TO YOU - You have been punk'd!\n")
exit()
try:
with open(f_name, 'r') as f_hand:
floating_points = []
for line in f_hand:
if line.startswith('X-DSPAM'):
start_index_pos = line.find(':')
start_index_pos = float(start_index_pos)
floating_points.append(start_index_pos)
print("The floating points are::\n")
for floating_point in floating_points:
print(floating_point)
print(f"There are {len(floating_points)} items on the list and they sum to {sum(floating_points)}.")
except IOError:
print(f'File missing:: {f_name}.')
exit()