From bd76bb41e59f269bba5c633e9e715d8b81f5d2a2 Mon Sep 17 00:00:00 2001 From: Helena Zhang Date: Wed, 27 Sep 2023 13:55:23 -0400 Subject: [PATCH 1/2] raise error if `suppress_errors` flag isn't true --- qiskit_experiments/framework/experiment_data.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/qiskit_experiments/framework/experiment_data.py b/qiskit_experiments/framework/experiment_data.py index 20fab44cc8..37486d4132 100644 --- a/qiskit_experiments/framework/experiment_data.py +++ b/qiskit_experiments/framework/experiment_data.py @@ -1611,9 +1611,10 @@ def _save_experiment_metadata(self, suppress_errors: bool = True) -> None: suppress_errors: should the method catch exceptions (true) or pass them on, potentially aborting the experiment (false) Raises: - QiskitError: If the save to the database failed + ExperimentDataSaveFailed: If the save to the database failed. + .. note:: - This method does not save analysis results nor figures. + This method does not save analysis results or figures. Use :meth:`save` for general saving of all experiment data. See :meth:`qiskit.providers.experiment.IBMExperimentService.create_experiment` @@ -1625,7 +1626,10 @@ def _save_experiment_metadata(self, suppress_errors: bool = True) -> None: "An experiment service is available, for example, " "when using an IBM Quantum backend." ) - return + if suppress_errors: + return + else: + raise ExperimentDataSaveFailed("No service found") try: handle_metadata_separately = self._metadata_too_large() if handle_metadata_separately: @@ -1656,7 +1660,9 @@ def _save_experiment_metadata(self, suppress_errors: bool = True) -> None: # Don't automatically fail the experiment just because its data cannot be saved. LOG.error("Unable to save the experiment data: %s", traceback.format_exc()) if not suppress_errors: - raise QiskitError(f"Experiment data save failed\nError Message:\n{str(ex)}") from ex + raise ExperimentDataSaveFailed( + f"Experiment data save failed\nError Message:\n{str(ex)}" + ) from ex def _metadata_too_large(self): """Determines whether the metadata should be stored in a separate file""" From 4e3f50ffe6c0eeb13899398050d756527e05ca96 Mon Sep 17 00:00:00 2001 From: Helena Zhang Date: Wed, 27 Sep 2023 14:04:31 -0400 Subject: [PATCH 2/2] add error handling for saving figures --- .../framework/experiment_data.py | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/qiskit_experiments/framework/experiment_data.py b/qiskit_experiments/framework/experiment_data.py index 37486d4132..92fffc27bd 100644 --- a/qiskit_experiments/framework/experiment_data.py +++ b/qiskit_experiments/framework/experiment_data.py @@ -1612,7 +1612,7 @@ def _save_experiment_metadata(self, suppress_errors: bool = True) -> None: pass them on, potentially aborting the experiment (false) Raises: ExperimentDataSaveFailed: If the save to the database failed. - + .. note:: This method does not save analysis results or figures. Use :meth:`save` for general saving of all experiment data. @@ -1764,12 +1764,19 @@ def save( if isinstance(figure, pyplot.Figure): figure = plot_to_svg_bytes(figure) figures_to_create.append((figure, name)) - self.service.create_figures( - experiment_id=self.experiment_id, - figure_list=figures_to_create, - blocking=True, - max_workers=max_workers, - ) + try: + self.service.create_figures( + experiment_id=self.experiment_id, + figure_list=figures_to_create, + blocking=True, + max_workers=max_workers, + ) + except Exception as ex: # pylint: disable=broad-except + LOG.error("Unable to save figures: %s", traceback.format_exc()) + if not suppress_errors: + raise ExperimentDataSaveFailed( + f"Figure save failed\nError Message:\n{str(ex)}" + ) from ex for name in self._deleted_figures.copy(): with service_exception_to_warning():