Оборонительное программирование или потраченное время?
Общий смысл этого вопроса: если есть даже отдаленная возможность, что что-то может пойти не так, следует ли я поймать возможную ошибку? В частности:
У меня есть приложение, которое читает и записывает предыдущую историю программы в .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
минного поля.
- Почему вы можете читать, но не изменять глобальные ценности?
- Python – сборщик мусора для списка
- Неожиданный результат в инициализации класса Python
- PyBluez ImportError: Ошибка загрузки DLL:% 1 не является допустимым приложением Win32
- Cython: ImportError: нет модуля с именем 'myModule': как вызвать модуль cython, содержащий cimport для другого контура cython?
Более безопасным решением было бы открыть файл и открыть его, пока вы все еще загружаете. Пользователь не сможет удалить его. После того, как все будет загружено и зарегистрировано, закройте файл. Это также приведет к повышению производительности.
Почему вы создаете пустой файл при запуске приложения? Просто ничего не делайте, если файл отсутствует при запуске – open('trackData.txt', 'a')
все равно создаст новый файл.
- Объединение обратной косой черты на python
- peewee.OperationalError: слишком много переменных SQL на upsert всего 150 строк * 8 столбцов
- Разбор имен вложенных выражений с помощью пиража
- Первая программа с использованием функций
- получить минимальные и максимальные значения из цикла «for in»
- Как вызвать функции python при работе с терминалом
- Проверьте, заполнен ли ключ словаря списком из двух чисел
- Загрузите фотографию в ЛОКАЛЬНЫЙ ПРИВОД (не URL) на страницу поклонника Facebook, используя Python
- Изучение запущенного интерпретатора Python
- Фильтрация списков с элементами другого списка – Python
- Не удалось сохранить разрешение изображения с сохранением изображения Pyautogui.