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

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

Исключения

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

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

Классы доступны из ruts и ruts.exceptions. Это сами классы ядра anyTS (RutsError - его AnyTSError), а не подклассы: except RutsError ловит и ошибки кода ядра, а в трассировке стоит anyts.exceptions.SourceError. Сообщения - на русском, кроме проверок типов аргументов в коде ядра и отдельных функций ядра.

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()) ядро anyTS пишет в логгер anyts с уровнем INFO. По умолчанию они не видны; чтобы их увидеть, настройте логирование в приложении:

import logging

from ruts.datasets import SovChLit

logging.basicConfig(level=logging.INFO, format="%(name)s: %(message)s")
SovChLit(data_dir="/tmp/ruts_data").download()
anyts.datasets: Downloading the file https://github.com/SergeyShk/ruTS/raw/master/ruts/datasets/data/sov_chrest_lit_v1.tar.xz
anyts.datasets: The file is downloaded: /tmp/ruts_data/sov_chrest_lit_v1.tar.xz
anyts.datasets: Extracting the archive /tmp/ruts_data/sov_chrest_lit_v1.tar.xz

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