Чтобы быть уверенными, что файл точно закроется, лучше использовать контекстный менеджер with open(). Незакрытые файлы в python ведут к утечкам памяти, потере данных и непредсказуемому поведению программы.


Пример

Плохо:


def get_lesson(filepath):
file = open(filepath, 'r')
raw_lesson = file.read()
...

Хорошо:


def get_lesson(filepath):
with open(filepath, 'r') as file:
    raw_lesson = file.read()
...