> **Источник:** https://python-all.ru/3.2/library/xml.sax.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 19.10. [`xml.sax`](https://python-all.ru/3.2/library/xml.sax.html#module-xml.sax) – Поддержка парсеров SAX2

Пакет [`xml.sax`](https://python-all.ru/3.2/library/xml.sax.html#module-xml.sax) предоставляет несколько модулей, реализующих интерфейс Simple API for XML (SAX) для Python. Сам пакет предоставляет исключения SAX и вспомогательные функции, которые наиболее часто используются пользователями SAX API.

> **Предупреждение**
>
> Модуль [`xml.sax`](https://python-all.ru/3.2/library/xml.sax.html#module-xml.sax) не является безопасным для вредоносных данных. Если необходимо обрабатывать непроверенные или неаутентифицированные данные, обратитесь к разделу [*Уязвимости XML*](https://python-all.ru/3.2/library/xml.html#xml-vulnerabilities).

Удобные функции:

#### `xml.sax.make_parser(parser_list=[])`

Создаёт и возвращает объект SAX `XMLReader`. Будет использован первый найденный парсер. Если указан *parser\_list*, это должна быть последовательность строк, именующих модули, в которых есть функция `create_parser()`. Модули из *parser\_list* будут проверяться раньше модулей из списка парсеров по умолчанию.

#### `xml.sax.parse(filename_or_stream, handler, error_handler=handler.ErrorHandler())`

Создаёт парсер SAX и использует его для разбора документа. Документ, передаваемый в качестве *filename\_or\_stream*, может быть именем файла или файловым объектом. Параметр *handler* должен быть экземпляром SAX `ContentHandler`. Если указан *error\_handler*, он должен быть экземпляром SAX `ErrorHandler`; если опущен, при всех ошибках будет возбуждаться [`SAXParseException`](https://python-all.ru/3.2/library/xml.sax.html#xml.sax.SAXParseException). Возвращаемого значения нет; вся работа должна выполняться переданным *handler*.

#### `xml.sax.parseString(string, handler, error_handler=handler.ErrorHandler())`

Аналогична [`parse()`](https://python-all.ru/3.2/library/xml.sax.html#xml.sax.parse), но выполняет разбор из буфера *string*, переданного в качестве параметра.

Типичное SAX-приложение использует три вида объектов: читатели, обработчики и источники входных данных. «Читатель» в этом контексте – ещё один термин для парсера, т.е. некоторый код, который читает байты или символы из источника входных данных и порождает последовательность событий. Затем эти события распределяются по объектам-обработчикам: читатель вызывает метод на обработчике. Таким образом, SAX-приложение должно получить объект-читатель, создать или открыть источники входных данных, создать обработчики и соединить все эти объекты вместе. На последнем этапе подготовки вызывается читатель для разбора входных данных. Во время разбора вызываются методы объектов-обработчиков на основе структурных и синтаксических событий из входных данных.

Для этих объектов важны только интерфейсы; они обычно не создаются приложением напрямую. Поскольку в Python нет явного понятия интерфейса, они формально представлены как классы, но приложения могут использовать реализации, не наследующие от предоставленных классов. Интерфейсы `InputSource`, `Locator`, `Attributes`, `AttributesNS` и `XMLReader` определены в модуле [`xml.sax.xmlreader`](https://python-all.ru/3.2/library/xml.sax.reader.html#module-xml.sax.xmlreader). Интерфейсы обработчиков определены в [`xml.sax.handler`](https://python-all.ru/3.2/library/xml.sax.handler.html#module-xml.sax.handler). Для удобства `InputSource` (который часто создаётся напрямую) и классы обработчиков также доступны из [`xml.sax`](https://python-all.ru/3.2/library/xml.sax.html#module-xml.sax). Эти интерфейсы описаны ниже.

В дополнение к этим классам, [`xml.sax`](https://python-all.ru/3.2/library/xml.sax.html#module-xml.sax) предоставляет следующие классы исключений.

#### `exception xml.sax.SAXException(msg, exception=None)`

Инкапсулирует ошибку или предупреждение XML. Этот класс может содержать базовую информацию об ошибке или предупреждении как от XML-парсера, так и от приложения; он может быть подклассифицирован для добавления дополнительных возможностей или локализации. Обратите внимание: хотя обработчики, определённые в интерфейсе `ErrorHandler`, получают экземпляры этого исключения, его не требуется фактически возбуждать – он также полезен как контейнер для информации.

При создании экземпляра *msg* должен быть читаемым описанием ошибки. Необязательный параметр *exception*, если задан, должен быть `None` или исключением, которое было перехвачено кодом разбора и передаётся как информация.

Это базовый класс для других классов исключений SAX.

#### `exception xml.sax.SAXParseException(msg, exception, locator)`

Подкласс [`SAXException`](https://python-all.ru/3.2/library/xml.sax.html#xml.sax.SAXException), возбуждаемый при ошибках разбора. Экземпляры этого класса передаются методам интерфейса SAX `ErrorHandler` для предоставления информации об ошибке разбора. Этот класс поддерживает как интерфейс SAX `Locator`, так и интерфейс [`SAXException`](https://python-all.ru/3.2/library/xml.sax.html#xml.sax.SAXException).

#### `exception xml.sax.SAXNotRecognizedException(msg, exception=None)`

Подкласс [`SAXException`](https://python-all.ru/3.2/library/xml.sax.html#xml.sax.SAXException), возбуждаемый, когда SAX `XMLReader` сталкивается с нераспознанным свойством или характеристикой. SAX-приложения и расширения могут использовать этот класс для аналогичных целей.

#### `exception xml.sax.SAXNotSupportedException(msg, exception=None)`

Подкласс [`SAXException`](https://python-all.ru/3.2/library/xml.sax.html#xml.sax.SAXException), возбуждаемый, когда от SAX `XMLReader` требуется включить неподдерживаемую возможность или установить свойству значение, не поддерживаемое реализацией. SAX-приложения и расширения могут использовать этот класс для аналогичных целей.

> **См. также**
>
> **[SAX: Простой API для XML](https://python-all.ru/3.2/library/xml.sax.html)**
>
> Этот сайт является центром определения SAX API. Он предоставляет реализацию на Java и онлайн-документацию. Также доступны ссылки на реализации и историческую информацию.
>
> **Модуль [`xml.sax.handler`](https://python-all.ru/3.2/library/xml.sax.handler.html#module-xml.sax.handler)**
>
> Определения интерфейсов для объектов, предоставляемых приложением.
>
> **Модуль [`xml.sax.saxutils`](https://python-all.ru/3.2/library/xml.sax.utils.html#module-xml.sax.saxutils)**
>
> Удобные функции для использования в SAX-приложениях.
>
> **Модуль [`xml.sax.xmlreader`](https://python-all.ru/3.2/library/xml.sax.reader.html#module-xml.sax.xmlreader)**
>
> Определения интерфейсов для объектов, предоставляемых парсером.

## 19.10.1. Объекты SAXException

Класс исключения [`SAXException`](https://python-all.ru/3.2/library/xml.sax.html#xml.sax.SAXException) поддерживает следующие методы:

#### `SAXException.getMessage()`

Возвращает понятное человеку сообщение, описывающее условие ошибки.

#### `SAXException.getException()`

Возвращает инкапсулированный объект исключения или `None`.
