Общая суть этого вопроса: если есть даже отдаленная возможность, что что-то может пойти не так, следует ли я поймать возможную ошибку? В частности:Оборонительное программирование или потраченное время?
У меня есть приложение, которое читает и записывает предыдущую историю программы в .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
.
Вы хотите поймать * особые * исключения только. В этом случае catch 'OSError', * not *' Exception' .. –