Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
develop:pyton:excep [2022/03/07 13:36] admin создано |
develop:pyton:excep [2022/12/18 15:09] (текущий) admin |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Обработка исключений. Итераторы, | ====== Обработка исключений. Итераторы, | ||
+ | ===== Обработка исключений ===== | ||
+ | В Python исключения используются **не только в случае ошибки но при каких либо событиях**, | ||
+ | [[https:// | ||
+ | ==== try..except..else..finally ==== | ||
+ | <code python> | ||
+ | try: | ||
+ | ... | ||
+ | except [ [as ]]: | ||
+ | ... # Блоков может быть несколько | ||
+ | else: | ||
+ | ... # Выполняется если исключения не было | ||
+ | finally: | ||
+ | ... # Выполняется в любом случае | ||
+ | </ | ||
+ | |||
+ | <code python> | ||
+ | try: | ||
+ | ... | ||
+ | except (NameError, IndexError, EsheError) as err: | ||
+ | ... # обработка нескольких исключений | ||
+ | print(err.__class__.__name__) | ||
+ | </ | ||
+ | |||
+ | Более подробную инфу по исключению можно получить в **tracebask.exc_info()**, | ||
+ | |||
+ | |||
+ | ==== with..as ==== | ||
+ | Протокол " | ||
+ | Не совсем понял отличия от try..finally ..\\ | ||
+ | В классе, | ||
+ | |||
+ | |||
+ | ==== Классы встроенных исключений ==== | ||
+ | Все **встроенные исключения являются классами**, | ||
+ | |||
+ | |||
+ | ==== Пользовательские исключения ==== | ||
+ | Для инициирования исключения предназначены функции: | ||
+ | В первом случае указывается экземпляр (или объект) класса исключения, | ||
+ | Во втором, | ||
+ | |||
+ | <code python> | ||
+ | class myError(Exception): | ||
+ | ... | ||
+ | |||
+ | try: | ||
+ | raise myError(" | ||
+ | except myError as err: | ||
+ | ... | ||
+ | |||
+ | ############## | ||
+ | try: | ||
+ | assert x>= 0, " | ||
+ | except AssertionError as err: | ||
+ | print(err) # Покажет сообщение об ошибке | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Итераторы, | ||
+ | |||
+ | ==== Итераторы ==== | ||
+ | Класс генерирующий **последовательности каких либо значений**. Могут быть полезны например в циклах for\\ | ||
+ | В таком классе нужно переопределить спец методы: | ||
+ | |||
+ | |||
+ | ==== Контейнеры ==== | ||
+ | Могут выступать как последовательности (списки/ | ||
+ | |||
+ | |||
+ | ==== Перечисления ==== | ||
+ | Набор каких-либо именованных значений, | ||
+ | |||
+ | <code python> | ||
+ | from enum import Enum | ||
+ | class Versions(Enum): | ||
+ | v2_7= " | ||
+ | v3_6= " | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Работа с файлами и каталогами ===== | ||
+ | ==== Открытие ==== | ||
+ | Метод **open()**, путь можно передавать относительный, | ||
+ | **Текущий каталог** скрипта тот **из которого он запущен** а не тот в котором он располагается\\ | ||
+ | Сделать каталог текущим можно также функцией **os.chdir()**\\ | ||
+ | Кодировка по умолчанию **Unicode**, | ||
+ | При открытии можно задавать флаг буферизации, | ||
+ | |||
+ | |||
+ | ==== Методы ==== | ||
+ | Типа: **close(), write(), writelines(), | ||
+ | **fileno()** дескриптор файла, **truncate()**- обрезка файла, **tell()**- текущая позиция указателя, | ||
+ | Так же есть атрибуты типа: **name, mode, closed, encoding, buffer**\\ | ||
+ | |||
+ | |||
+ | ==== Доступ (модуль os) ==== | ||
+ | Здесь так же присутствует метод **open()**, в аргументах можно задать режим и уровень доступа\\ | ||
+ | |||
+ | |||
+ | ==== StringIO / BytesIO ==== | ||
+ | Данные классы позволяют работать с содержимым файла (в ОЗУ) как с переменной (строковой либо байтовой с-но)\\ | ||
+ | Методы во многом аналогичны методам работы с файлами.\\ | ||
+ | |||
+ | |||
+ | ==== Права доступа ==== | ||
+ | Функция **os.access()** задает права доступа к объектам в linux-формате т.е. числовой (750 и тд.)\\ | ||
+ | Так же есть варианты для проверки доступа\\ | ||
+ | |||
+ | |||
+ | ==== Манипулирование файлами ==== | ||
+ | **copyfile(), | ||
+ | Модуль os.path- **exists(), getsize(), getatime(), getmtime()**\\ | ||
+ | Получить информацию о файле позволяет ф-я **os.stat()**, | ||
+ | |||
+ | Пути файлов/ | ||
+ | **abspath(), | ||
+ | |||
+ | |||
+ | ==== Перенаправление В/В ==== | ||
+ | Можно перенаправить стандартные потоки в файлы: | ||
+ | <code python> | ||
+ | import sys | ||
+ | |||
+ | my_out= sys.stdout | ||
+ | file= open(..) | ||
+ | sys.stdout= file | ||
+ | print(" | ||
+ | |||
+ | sys.stdout=my_out | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Сохранение объектов в файл ==== | ||
+ | Сохранить/ | ||
+ | В первом есть: **dump()**, **load()**, можно сохранять/ | ||
+ | |||
+ | Модуль **shelve** позволяет сохранять объекты с заданным строковым ключом, | ||
+ | |||
+ | |||
+ | ==== Работа с каталогами ==== | ||
+ | **getcwd(), chdir(), mkdir(), rmdir(), listdir(), walk()** последняя для обхода дерева\\ | ||
+ | |||
+ | |||
+ | === scandir() === | ||
+ | Более продвинуты инструмент для обхода списка каталогов\\ | ||
+ | |||
+ | |||
+ | ==== Исключения файловых операций ==== | ||
+ | Основной (родительский) класс для исключений при работе с каталогами - **OSError**, | ||