Перейти к содержанию

Исключения и логирование

ruts.exceptions

Исключения

Все исключения библиотеки наследуют базовый класс RutsError и один из встроенных классов Python, поэтому их можно ловить как по имени ruTS, так и по привычному встроенному типу - прежний код с except ValueError продолжает работать.

Исключение Встроенный класс Когда поднимается
RutsError Exception Базовый класс, сам не поднимается
SourceTypeError TypeError Источник данных не строка и не Doc, справочник не Counter, список текстов не список списков, путь не строка и не Path, токенизатор не вызываемый объект
SourceError ValueError В источнике нет слов, предложений, текстов или коллокаций, нет разбора зависимостей, текстов меньше, чем нужно мере, после отсева не осталось единиц
ParameterError ValueError Порог, окно, размер сегмента или число элементов вне допустимого диапазона; неизвестная мера, вариант, пресет, слой, ступень, категория набора данных
UnknownStatError ParameterError, KeyError В MorphStats.explain_text запрошена неизвестная статистика
DatasetNotFoundError OSError Набор данных не загружен; текст подсказывает команду загрузки
DataFileError ValueError Файл набора данных поврежден, имеет неожиданный формат или не декодируется
DownloadError RuntimeError Файл не удалось скачать или он не прошел проверку контрольной суммы

Классы доступны из ruts и из ruts.exceptions.

Пример

from ruts import BasicStats, RutsError, SourceError
from ruts.datasets import PoetryCorpus

try:
    BasicStats("...")
except SourceError as e:
    print(e)
# В источнике данных отсутствуют слова

try:
    list(PoetryCorpus(data_dir="/nowhere").get_texts(limit=1))
except RutsError as e:
    print(type(e).__name__)
# DatasetNotFoundError

Логирование

Библиотека ничего не печатает сама: сообщения о загрузке и извлечении наборов данных (download_file, extract_archive, методы download()) отправляются в логгер ruts уровня INFO. По умолчанию у логгера стоит NullHandler, и сообщения не видны; чтобы включить их, настройте логирование в приложении:

Пример

import logging

from ruts.datasets import RussianLiterature

logging.basicConfig(level=logging.INFO, format="%(name)s: %(message)s")
RussianLiterature().download()
# ruts.utils: Загрузка файла https://github.com/d0rj/RusLit/archive/....zip
# ruts.utils: Файл загружен: .../ruts_data/texts/russian_literature.zip
# ruts.utils: Извлечение файлов из архива .../ruts_data/texts/russian_literature.zip

Методы print_stats() классов статистик и print_kwic() печатают в стандартный вывод по своему назначению, логирование их не касается.