Saltar a contenido

Excepciones y registro

Excepciones

Todas las excepciones de la biblioteca heredan de la clase base EstsError y de una clase integrada de Python, así que pueden capturarse por cualquiera de las dos, y except ValueError sigue funcionando.

Excepción Clase integrada Cuándo se lanza
EstsError Exception Clase base, nunca se lanza directamente
SourceTypeError TypeError La fuente no es una cadena ni un Doc; el texto de un extractor no es una cadena; se pasa una cadena, un Doc, un iterador o un objeto no iterable donde se espera una lista de palabras, o la lista contiene algo que no son cadenas, como tokens de spaCy; los textos de una visualización no son listas de palabras; las frecuencias de zipf no son un Counter; la medida de fingerprinting o el tokenizador no son invocables, o el tokenizador devuelve un objeto no iterable o algo que no son cadenas; una ruta no es una cadena ni un Path; las palabras vacías o los clichés (métricas de estilo, resaltado) son una cadena y no una lista; una palabra de las sílabas, de la transcripción o de las palabras vacías no es una cadena; las palabras clave de keyness_plot, las colocaciones de collocation_network o las concordancias de format_kwic no son una lista; las características de compare_corpora o corpus_features no son una función
SourceError ValueError La fuente no tiene palabras, oraciones, textos ni colocaciones, le falta la anotación que una estadística necesita (categorías gramaticales, lemas, análisis de dependencias), es una cadena más larga que el max_length del pipeline (para los sustantivos deverbales, tiene una oración más larga que él) o no queda nada tras el filtrado; Delta o las componentes principales reciben menos de tres textos; una matriz de distancias no es cuadrada o tiene una distancia infinita; el pipeline de function_words_profile no etiqueta las categorías gramaticales; ningún texto de una comparación tiene una ventana de palabras suficientes; la palabra clave de wordtree no se encuentra o no tiene ninguna palabra al lado
ParameterError ValueError No es un entero: una longitud, ventana, paso, número de elementos u otro recuento, aunque sea un float sin decimales. Fuera de rango: un umbral, ventana, tamaño de segmento, número de elementos, base del logaritmo, nivel de confianza, número de muestras bootstrap o límite de una banda de frecuencia (1-10 000); un límite de registros o un límite de longitud de un extractor negativo; partes de dispersion que no suman las palabras; una palabra clave de kwic vacía. Desconocidos: un preajuste, escala, nombre de métrica, medida, variante, campo de una palabra clave, género o categoría gramatical. Resaltado: una capa desconocida o que la fuente no admite (las capas sintácticas y los sustantivos deverbales en una cadena o en un Doc sin el análisis o sin los lemas), capas que no son una lista ni una cadena, un umbral de la aliteración fuera de (0, 1], un número de palabras de una oración larga o de sílabas de una palabra compleja menor que 1. Gráficos: los ejes no son unos Axes de matplotlib. Una facilidad de lectura que no es un número finito (nan, un infinito) convertida en un grado; categorías gramaticales de find_connectors que no son tantas como las palabras
UnknownStatError ParameterError, KeyError Se pide por nombre una estadística desconocida, como en DiversityStats.windowed
DatasetNotFoundError OSError El modelo de spaCy no está instalado o un conjunto de datos no está descargado; el mensaje da el comando que lo resuelve
DataFileError ValueError El archivo de un conjunto de datos no es ZIP ni TAR, no se puede extraer, está vacío o tiene rutas fuera de su directorio, o su directorio de destino no se puede crear; una línea de un fichero de un conjunto de datos no se puede leer
DownloadError RuntimeError El archivo no se pudo descargar o no se pudo crear su directorio, o no superó dos veces la suma de verificación

Las clases están disponibles desde ests y desde ests.exceptions. Son las clases del núcleo anyTS con los mismos nombres, y EstsError es su anyts.exceptions.AnyTSError: alias, no subclases, así que except EstsError captura también los errores que lanza el código del núcleo, y una traza muestra anyts.exceptions.SourceTypeError.

Nota

DatasetNotFoundError suele ser el primer error con el que se topa un usuario nuevo: MorphStats("El gato duerme") sin el modelo es_core_news_sm la lanza con el comando de descarga. También la lanzan SpanishLiterature().get_texts() antes de download() y las estadísticas de LexicalStats según el diccionario de frecuencias.

from ests import EstsError, ParameterError, WordsExtractor

try:
    WordsExtractor(ngram_range=(2, 1))
except ParameterError as e:
    print(e)

try:
    WordsExtractor(tokenizer=42).extract("El gato duerme.")
except EstsError as e:
    print(type(e).__name__)
The lower N-gram bound is greater than the upper
SourceTypeError

Registro

La biblioteca no imprime nada por su cuenta: el núcleo anyTS envía los mensajes sobre la descarga y la extracción de los conjuntos de datos (los métodos download()) al logger anyts con el nivel INFO. Por defecto el logger tiene un NullHandler, así que los mensajes quedan en silencio; para verlos, configure el registro en su aplicación:

import logging

from ests.datasets import SpanishSonnets

logging.basicConfig(level=logging.INFO, format="%(name)s: %(message)s")
SpanishSonnets(data_dir="/tmp/ests_data").download()
anyts.datasets: Downloading the file https://github.com/SergeyShk/esTS/raw/master/ests/datasets/data/spanish_sonnets_v1.tar.xz
anyts.datasets: The file is downloaded: /tmp/ests_data/spanish_sonnets_v1.tar.xz
anyts.datasets: Extracting the archive /tmp/ests_data/spanish_sonnets_v1.tar.xz

Los métodos print_stats() de las clases de estadísticas, MorphStats.print_markers() y print_kwic() escriben en la salida estándar a propósito; el registro no les afecta.