Игорь Раскин, ничего не понял. Но подозреваю, что вам символ переноса строки мешает получить значение по ключу. Попробуйте исправить на d = {k.strip(): 0 for k in fh}
nonname, код выполняемый чтобы ни случилось - это так называемая спасательная процедура. Чаще всего такие процедуры пишут тогда, когда для освобождения ресурсов не используют контекстные менеджеры, а для целостности данных транзакции. В тех редких случаях, когда они действительно нужны, выполнять их лучше в обработчиках atexit, а не широких исключений.
nonname, одно из золотых правил - перехватывать только те исключения, с которыми знаешь, что делать. Если в программе появляется неожиданная ситуация, то продолжение работы может привести к нестабильному состоянию, которые может вылезти неожиданным образом в неожиданный момент. Бывали случаи в мировой практике, когда "проглоченное" исключение неделю незаметно для всех портило критические данные. Правильнее будет упасть.
chupasaurus, devalone, дело не в том, что без Тостера нельзя попасть на собеседование. Во-первых, в любых торгах, к которым относятся и собеседования, слабая позиция у инициатора. Так что если вас пригласили на собеседование, а не вы попросились на него - это уже маленькая победа. Во-вторых, если вы откликнулись на вакансию, никто из представителей нанимателя не знает о вас вообще ничего и заранее в вас не заинтересован. Вы какой-то хмырь с улицы, который скорее всего зря потратит время интервьюеров. Если вас пригласили, в вашем найме заинтересован как минимум рекрутёр. А иногда бывает, что ваш будущий непосредственный начальник уже с интересом сообщил кадровику, что слышал о вас и ваше резюме для него самое интересное в остальной стопке подходящих кандидатов.
Очень подходящий отрывок из сериала "Клиника".