Инструменты пользователя

Инструменты сайта


develop:pyton:excep

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
develop:pyton:excep [2022/03/07 13:36]
admin создано
develop:pyton:excep [2022/12/18 15:09] (текущий)
admin
Строка 1: Строка 1:
 ====== Обработка исключений. Итераторы, контейнеры и перечисления. Работа с файлами и каталогами ====== ====== Обработка исключений. Итераторы, контейнеры и перечисления. Работа с файлами и каталогами ======
  
 +===== Обработка исключений =====
 +В Python исключения используются **не только в случае ошибки но при каких либо событиях**, например конец списка (ValueError)\\
 +[[https://pythonworld.ru/tipy-dannyx-v-python/isklyucheniya-v-python-konstrukciya-try-except-dlya-obrabotki-isklyuchenij.html|Классы исключений]]
  
 +==== try..except..else..finally ====
 +<code python>
 +try:
 +  ...
 +except [ [as ]]:
 +  ... # Блоков может быть несколько
 +else:
 +  ... # Выполняется если исключения не было
 +finally:
 +  ... # Выполняется в любом случае
 +</code>
 +
 +<code python>
 +try:
 +  ...
 +except (NameError, IndexError, EsheError) as err:
 +  ... # обработка нескольких исключений
 +  print(err.__class__.__name__)
 +</code>
 +
 +Более подробную инфу по исключению можно получить в **tracebask.exc_info()**, можно даже трассировку делать оО\\
 +
 +
 +==== with..as ====
 +Протокол "Менеджеров контекста" гарантирует выполнение завершающих действий, например закрытие файла, даже при исключениях.\\
 +Не совсем понял отличия от try..finally ..\\
 +В классе, который используется в этом блоке, должны быть еще спец функции **__enter__() и __exit__()**\\
 +
 +
 +==== Классы встроенных исключений ====
 +Все **встроенные исключения являются классами**, благодаря этому сохраняется **вложенная структура**\\
 +
 +
 +==== Пользовательские исключения ====
 +Для инициирования исключения предназначены функции: **raise** и **assert**\\
 +В первом случае указывается экземпляр (или объект) класса исключения, можно передавать параметры и т.д.\\
 +Во втором, делается проверка выражения и в случае "False", вызывается исключение\\
 +
 +<code python>
 +class myError(Exception):
 +  ...
 +
 +try:
 +  raise myError("Описание исключения")
 +except myError as err:
 + ...
 +
 +##############
 +try:
 +  assert x>= 0, "Сообщение об ошибке"
 +except AssertionError as err:
 +  print(err) # Покажет сообщение об ошибке
 +</code>
 +
 +
 +
 +===== Итераторы, контейнеры и перечисления =====
 +
 +==== Итераторы ====
 +Класс генерирующий **последовательности каких либо значений**. Могут быть полезны например в циклах for\\
 +В таком классе нужно переопределить спец методы: **__iter__()** (флаг такого класса и инициализация за одно) и **__next__()** (вызывается на каждой итерации), для окончания следует вызывать исключение **"StopIteration"**\\
 +
 +
 +==== Контейнеры ====
 +Могут выступать как последовательности (списки/кортежи) или отображения (словари), можно обращаться к элементам по индексу (ключу)\\
 +
 +
 +==== Перечисления ====
 +Набор каких-либо именованных значений, аналогичен перечислениям из С\\
 +
 +<code python>
 +from enum import Enum
 +class Versions(Enum):
 +  v2_7= "2.7"
 +  v3_6= "3.7"
 +</code>
 +
 +
 +
 +===== Работа с файлами и каталогами =====
 +==== Открытие ====
 +Метод **open()**, путь можно передавать относительный, он автоматом преобразуется в абсолютный, методом **os.abspath()**\\
 +**Текущий каталог** скрипта тот **из которого он запущен** а не тот в котором он располагается\\
 +Сделать каталог текущим можно также функцией **os.chdir()**\\
 +Кодировка по умолчанию **Unicode**, указать можно аргументом функции open(.., **encoding='..'**)\\
 +При открытии можно задавать флаг буферизации, иначе сброс на диск происходит только при закрытии файла или метод **flush()**\\
 +
 +
 +==== Методы ====
 +Типа: **close(), write(), writelines(), writable(), read(), readline(), readlines(), __next__(), flush()**\\
 +**fileno()** дескриптор файла, **truncate()**- обрезка файла, **tell()**- текущая позиция указателя, **seek()**- установить указатель в указанную позицию\\
 +Так же есть атрибуты типа: **name, mode, closed, encoding, buffer**\\ 
 +
 +
 +==== Доступ (модуль os) ====
 +Здесь так же присутствует метод **open()**, в аргументах можно задать режим и уровень доступа\\
 +
 +
 +==== StringIO / BytesIO ====
 +Данные классы позволяют работать с содержимым файла (в ОЗУ) как с переменной (строковой либо байтовой с-но)\\
 +Методы во многом аналогичны методам работы с файлами.\\
 +
 +
 +==== Права доступа ====
 +Функция **os.access()** задает права доступа к объектам в linux-формате т.е. числовой (750 и тд.)\\
 +Так же есть варианты для проверки доступа\\
 +
 +
 +==== Манипулирование файлами ====
 +**copyfile(), copy(), copy2()**- копирования, отличается копированием (не копированием) сопутствующих метаданных, **move(), rename(), remove()**\\
 +Модуль os.path- **exists(), getsize(), getatime(), getmtime()**\\
 +Получить информацию о файле позволяет ф-я **os.stat()**, содержит расширенную информацию о файле\\
 +
 +Пути файлов/каталогов:\\
 +**abspath(), isabs(), basename(), dirname(), split(), splitdrive(), splittext()**- работа с путями в т.д. проверка абсолютности, разбиение на имя диска (файла) и пути, объединение и т.д.\\
 +
 +
 +==== Перенаправление В/В ====
 +Можно перенаправить стандартные потоки в файлы:\\
 +<code python>
 +import sys
 +
 +my_out= sys.stdout
 +file= open(..)
 +sys.stdout= file
 +print("Вывод идет в файл")
 +
 +sys.stdout=my_out
 +print("Вернули обратно")
 +</code>
 +
 +
 +==== Сохранение объектов в файл ====
 +Сохранить/восстановить объекты позволяют модули **pickle** и **shelve**\\
 +В первом есть: **dump()**, **load()**, можно сохранять/восстанавливать несколько объектов, последовательным вызовом\\
 +
 +Модуль **shelve** позволяет сохранять объекты с заданным строковым ключом, по принципу сходному со словарем\\
 +
 +
 +==== Работа с каталогами ====
 +**getcwd(), chdir(), mkdir(), rmdir(), listdir(), walk()** последняя для обхода дерева\\ 
 +
 +
 +=== scandir() ===
 +Более продвинуты инструмент для обхода списка каталогов\\
 +
 +
 +==== Исключения файловых операций ====
 +Основной (родительский) класс для исключений при работе с каталогами - **OSError**, он содержит ряд более специализированных потомков\\
  
develop/pyton/excep.1646660200.txt.gz · Последнее изменение: 2022/03/07 13:36 — admin