From aedd0bbe26e1c5b7204b7c5592a1c076345e905e Mon Sep 17 00:00:00 2001 From: vandhanaanatarajan-oss Date: Sat, 1 Aug 2026 15:17:32 +0100 Subject: [PATCH 1/3] Raise OptionalImportError when user-specified reader is not installed (fixes #7437) Signed-off-by: vandhanaanatarajan-oss --- monai/transforms/io/array.py | 6 +++--- tests/transforms/test_load_image.py | 11 ++++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/monai/transforms/io/array.py b/monai/transforms/io/array.py index aadd96763d..406a148ed9 100644 --- a/monai/transforms/io/array.py +++ b/monai/transforms/io/array.py @@ -209,10 +209,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..f45bb5b49b 100644 --- a/tests/transforms/test_load_image.py +++ b/tests/transforms/test_load_image.py @@ -221,9 +221,14 @@ 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 + + with patch("monai.data.ITKReader", side_effect=OptionalImportError("itk not installed")): + with self.assertRaises(OptionalImportError): + LoadImage(reader="ITKReader") @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"): From a476a632caa70e14a16dfdd2758a8c7bb758c48c Mon Sep 17 00:00:00 2001 From: vandhanaanatarajan-oss Date: Sat, 1 Aug 2026 15:41:36 +0100 Subject: [PATCH 2/3] Address CodeRabbit feedback: add Raises docstring and check exception chain in test Signed-off-by: vandhanaanatarajan-oss --- monai/transforms/io/array.py | 4 ++++ tests/transforms/test_load_image.py | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/monai/transforms/io/array.py b/monai/transforms/io/array.py index 406a148ed9..28c0524ff3 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: diff --git a/tests/transforms/test_load_image.py b/tests/transforms/test_load_image.py index f45bb5b49b..68b03ec7bf 100644 --- a/tests/transforms/test_load_image.py +++ b/tests/transforms/test_load_image.py @@ -226,9 +226,11 @@ def test_reader_not_installed_raises(self): from unittest.mock import patch from monai.utils import OptionalImportError - with patch("monai.data.ITKReader", side_effect=OptionalImportError("itk not installed")): - with self.assertRaises(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"): From f3bd473182d592f4f1f02f15f1b8e21da2d4ee7a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 1 Aug 2026 14:41:53 +0000 Subject: [PATCH 3/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- monai/transforms/io/array.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monai/transforms/io/array.py b/monai/transforms/io/array.py index 28c0524ff3..49f9642375 100644 --- a/monai/transforms/io/array.py +++ b/monai/transforms/io/array.py @@ -166,7 +166,7 @@ def __init__( Raises: OptionalImportError: If an explicitly selected reader dependency is unavailable. - + Note: