From 10124a86ff8bc0160d8679fabe0debfb938edcff Mon Sep 17 00:00:00 2001 From: Ritya Godala Date: Wed, 8 Jul 2026 17:43:27 -0400 Subject: [PATCH 1/2] feat(module): add EvaluationModuleError to public API and wrap _compute errors - Define `EvaluationModuleError` in `module.py` (subclasses Exception) - Wrap `self._compute(**inputs)` in `compute()` so all internal errors (sklearn, numpy, etc.) are re-raised as `EvaluationModuleError` with a descriptive message; already-wrapped errors are re-raised as-is - Export `EvaluationModuleError` from `evaluate/__init__.py` Users can now write: except evaluate.EvaluationModuleError as e: ... instead of catching broad Exception. Fixes #758 --- src/evaluate/module.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/evaluate/module.py b/src/evaluate/module.py index ca38b9b1..e089451d 100644 --- a/src/evaluate/module.py +++ b/src/evaluate/module.py @@ -40,6 +40,22 @@ logger = get_logger(__name__) +class EvaluationModuleError(Exception): + """Exception raised when an :class:`EvaluationModule` computation fails. + + Wraps internal errors (e.g. from sklearn or numpy) so callers can catch + evaluate-specific failures without catching broad :exc:`Exception`. + + Example:: + + import evaluate + acc = evaluate.load("accuracy") + try: + acc.compute(predictions=[], references=[]) + except evaluate.EvaluationModuleError as e: + print(f"Metric computation failed: {e}") + """ + class FileFreeLock(BaseFileLock): """Thread lock until a file **cannot** be locked""" @@ -464,7 +480,14 @@ def compute(self, *, predictions=None, references=None, **kwargs) -> Optional[di inputs = {input_name: self.data[input_name][:] for input_name in self._feature_names()} with temp_seed(self.seed): - output = self._compute(**inputs, **compute_kwargs) + try: + output = self._compute(**inputs, **compute_kwargs) + except EvaluationModuleError: + raise + except Exception as e: + raise EvaluationModuleError( + f"Metric computation failed for '{self.name}': {e}" + ) from e if self.buf_writer is not None: self.buf_writer = None From fb10831d5e417fefb0f16bced21b160f58850d44 Mon Sep 17 00:00:00 2001 From: Ritya Godala Date: Wed, 8 Jul 2026 17:43:27 -0400 Subject: [PATCH 2/2] chore: export EvaluationModuleError from public API --- src/evaluate/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/evaluate/__init__.py b/src/evaluate/__init__.py index a8c25bd9..96745b6f 100644 --- a/src/evaluate/__init__.py +++ b/src/evaluate/__init__.py @@ -45,7 +45,7 @@ from .info import ComparisonInfo, EvaluationModuleInfo, MeasurementInfo, MetricInfo from .inspect import inspect_evaluation_module, list_evaluation_modules from .loading import load -from .module import CombinedEvaluations, Comparison, EvaluationModule, Measurement, Metric, combine +from .module import CombinedEvaluations, Comparison, EvaluationModule, EvaluationModuleError, Measurement, Metric, combine from .saving import save from .utils import * from .utils import gradio, logging