В Python исключения используются не только в случае ошибки но при каких либо событиях, например конец списка (ValueError)
Классы исключений
try: ... except [ [as ]]: ... # Блоков может быть несколько else: ... # Выполняется если исключения не было finally: ... # Выполняется в любом случае
try: ... except (NameError, IndexError, EsheError) as err: ... # обработка нескольких исключений print(err.__class__.__name__)
Более подробную инфу по исключению можно получить в tracebask.exc_info(), можно даже трассировку делать оО
Протокол «Менеджеров контекста» гарантирует выполнение завершающих действий, например закрытие файла, даже при исключениях.
Не совсем понял отличия от try..finally ..
В классе, который используется в этом блоке, должны быть еще спец функции enter() и exit()
Все встроенные исключения являются классами, благодаря этому сохраняется вложенная структура
Для инициирования исключения предназначены функции: raise и assert
В первом случае указывается экземпляр (или объект) класса исключения, можно передавать параметры и т.д.
Во втором, делается проверка выражения и в случае «False», вызывается исключение
class myError(Exception): ... try: raise myError("Описание исключения") except myError as err: ... ############## try: assert x>= 0, "Сообщение об ошибке" except AssertionError as err: print(err) # Покажет сообщение об ошибке
Класс генерирующий последовательности каких либо значений. Могут быть полезны например в циклах for
В таком классе нужно переопределить спец методы: iter() (флаг такого класса и инициализация за одно) и next() (вызывается на каждой итерации), для окончания следует вызывать исключение «StopIteration»
Могут выступать как последовательности (списки/кортежи) или отображения (словари), можно обращаться к элементам по индексу (ключу)
Набор каких-либо именованных значений, аналогичен перечислениям из С
from enum import Enum class Versions(Enum): v2_7= "2.7" v3_6= "3.7"
Метод 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
Здесь так же присутствует метод open(), в аргументах можно задать режим и уровень доступа
Данные классы позволяют работать с содержимым файла (в ОЗУ) как с переменной (строковой либо байтовой с-но)
Методы во многом аналогичны методам работы с файлами.
Функция 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()- работа с путями в т.д. проверка абсолютности, разбиение на имя диска (файла) и пути, объединение и т.д.
Можно перенаправить стандартные потоки в файлы:
import sys my_out= sys.stdout file= open(..) sys.stdout= file print("Вывод идет в файл") sys.stdout=my_out print("Вернули обратно")
Сохранить/восстановить объекты позволяют модули pickle и shelve
В первом есть: dump(), load(), можно сохранять/восстанавливать несколько объектов, последовательным вызовом
Модуль shelve позволяет сохранять объекты с заданным строковым ключом, по принципу сходному со словарем
getcwd(), chdir(), mkdir(), rmdir(), listdir(), walk() последняя для обхода дерева
Более продвинуты инструмент для обхода списка каталогов
Основной (родительский) класс для исключений при работе с каталогами - OSError, он содержит ряд более специализированных потомков