diff --git a/monai/transforms/io/array.py b/monai/transforms/io/array.py index aadd96763d..49f9642375 100644 --- a/monai/transforms/io/array.py +++ b/monai/transforms/io/array.py @@ -163,6 +163,10 @@ def __init__( expanduser: if True cast filename to Path and call .expanduser on it, otherwise keep filename as is. args: additional parameters for reader if providing a reader name. kwargs: additional parameters for reader if providing a reader name. + Raises: + OptionalImportError: If an explicitly selected reader dependency is unavailable. + + Note: @@ -209,10 +213,10 @@ def __init__( the_reader = look_up_option(_r.lower(), SUPPORTED_READERS) try: self.register(the_reader(*args, **kwargs)) - except OptionalImportError: - warnings.warn( + except OptionalImportError as e: + raise OptionalImportError( f"required package for reader {_r} is not installed, or the version doesn't match requirement." - ) + ) from e except TypeError: # the reader doesn't have the corresponding args/kwargs warnings.warn(f"{_r} is not supported with the given parameters {args} {kwargs}.") self.register(the_reader()) diff --git a/tests/transforms/test_load_image.py b/tests/transforms/test_load_image.py index 4a470a624c..68b03ec7bf 100644 --- a/tests/transforms/test_load_image.py +++ b/tests/transforms/test_load_image.py @@ -221,9 +221,16 @@ def test_nibabel_reader(self, input_param, filenames, expected_shape): assert_allclose(result.affine, torch.eye(4)) self.assertTupleEqual(result.shape, expected_shape) - @SkipIfNoModule("nibabel") - @SkipIfNoModule("cupy") - @SkipIfNoModule("kvikio") + + def test_reader_not_installed_raises(self): + from unittest.mock import patch + from monai.utils import OptionalImportError + + original_error = OptionalImportError("itk not installed") + with patch("monai.data.ITKReader", side_effect=original_error): + with self.assertRaises(OptionalImportError) as context: + LoadImage(reader="ITKReader") + self.assertIs(context.exception.__cause__, original_error) @parameterized.expand([TEST_CASE_GPU_1, TEST_CASE_GPU_2, TEST_CASE_GPU_3, TEST_CASE_GPU_4]) def test_nibabel_reader_gpu(self, input_param, filenames, expected_shape): if torch.__version__.endswith("nv24.8"):