Про то, что сеанс работы с файлом нужно закрывать, вам уже сказали.
Я хочу добавить к этому пару моментов:
1. Чтобы не заморачиваться тем, закрыли вы файл или нет, рекомендуется всюду, где это целесобразно, использовать менеджеры контекста:
with open('some_file', 'w') as txt:
txt.write('Hello world!')
2. Если вы создаёте переменную внутри
try, то любые манипуляции с этой переменной тоже должны происходить внутри этого же блока
try. А то исключение ошибки ввода-вывода вы отловили, но если такая ошибка произойдёт, то переменная txt не создастся, и у вас выскочит исключение NameError, когда вы попытаетесь сделать txt.write(st).
3. Точки с запятой в питоне не ставят.