If we open the file in the recommended way using the with statement then we can be sure that the close method of the fh object will be called when we leave the context of the with statement.
import sys import re def do_something(filename): with open(filename) as fh: while True: line = fh.readline() if line is None: break line = line.rstrip("\n") if re.search(r'\A\s*\Z', line): return print(line) def main(): if len(sys.argv) != 2: exit(f"Usage: {sys.argv[0]} FILENAME") filename = sys.argv[1] do_something(filename) main()