Оборонительное программирование или потраченное время?

Общий смысл этого вопроса: если есть даже отдаленная возможность, что что-то может пойти не так, следует ли я поймать возможную ошибку? В частности:

У меня есть приложение, которое читает и записывает предыдущую историю программы в .txt-файл. После инициализации программа считывает файл истории, чтобы определить, какие операции он должен и не должен делать. Если файл истории еще не существует, он создает его. Вот так:

global trackList try: # Open history of downloaded MP3s and transfer it to trackList with open('trackData.txt', 'r') as f: trackrackList = f.readlines() except Exception, e: #if file does not exist, create a blank new one with open('trackData.txt', 'w') as f: f.write("") 

Затем программа переходит к загрузке MP3-файлов на основе того, были ли они в файле txt или нет. Как только он загрузил MP3, он добавляет его в txt файл. Вот так:

 mp3File = requests.get(linkURL) with open('trackData.txt', 'a') as f: f.write(linkURL + '\n') 

Теперь почти на 100% уверен, что txt файл останется с момента его создания в первой функции. Мы имеем дело с загрузкой нескольких MP3 здесь – программа не будет работать более нескольких минут. Тем не менее, существует удаленная возможность того, что файл txt истории будет удален пользователем или иным образом поврежден во время загрузки MP3, и в этом случае программа выйдет из строя, потому что обработка ошибок отсутствует.

Будет ли хороший программист обернуть последний блок кода в try ... except блока, который создает файл txt истории, если он не существует, или это просто лишняя паранойя и потраченное впустую пространство? Это тривиально реализовать, но имейте в виду, что у меня есть такие программы, где есть буквально сотни возможностей для пользователей удалять / повреждать ранее созданный файл txt в крошечном окне времени. Мой обычный плоский код Python превратился бы в вложенную try ... except минного поля.

Более безопасным решением было бы открыть файл и открыть его, пока вы все еще загружаете. Пользователь не сможет удалить его. После того, как все будет загружено и зарегистрировано, закройте файл. Это также приведет к повышению производительности.

Почему вы создаете пустой файл при запуске приложения? Просто ничего не делайте, если файл отсутствует при запуске – open('trackData.txt', 'a') все равно создаст новый файл.