Skip to content

Commit a741d0b

Browse files
committed
Fix LoadImage to raise OptionalImportError when specified reader is not available
- Modified LoadImage.__init__ to catch ValueError from look_up_option when reader name is not recognized - Raise OptionalImportError instead of just warning when specified reader is not installed - Added test case to verify the new behavior This addresses issue #7437 where LoadImage would silently fall back to another reader when the specified reader (e.g., ITKReader) was not installed. Now it properly raises an OptionalImportError to make it clear that the requested reader is not available. Fixes: #7437
1 parent 1dc0e68 commit a741d0b

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

monai/transforms/io/array.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,13 +206,19 @@ def __init__(
206206
if not has_built_in:
207207
the_reader = locate(f"{_r}") # search dotted path
208208
if the_reader is None:
209-
the_reader = look_up_option(_r.lower(), SUPPORTED_READERS)
209+
try:
210+
the_reader = look_up_option(_r.lower(), SUPPORTED_READERS)
211+
except ValueError:
212+
# If the reader name is not recognized at all, raise OptionalImportError
213+
raise OptionalImportError(
214+
f"Cannot find reader '{_r}'. It may not be installed or recognized."
215+
)
210216
try:
211217
self.register(the_reader(*args, **kwargs))
212-
except OptionalImportError:
213-
warnings.warn(
218+
except OptionalImportError as e:
219+
raise OptionalImportError(
214220
f"required package for reader {_r} is not installed, or the version doesn't match requirement."
215-
)
221+
) from e
216222
except TypeError: # the reader doesn't have the corresponding args/kwargs
217223
warnings.warn(f"{_r} is not supported with the given parameters {args} {kwargs}.")
218224
self.register(the_reader())

tests/transforms/test_load_image.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
from monai.data.meta_obj import set_track_meta
2929
from monai.data.meta_tensor import MetaTensor
3030
from monai.transforms import LoadImage
31-
from monai.utils import optional_import
31+
from monai.utils import OptionalImportError, optional_import
3232
from tests.test_utils import SkipIfNoModule, assert_allclose, skip_if_downloading_fails, testing_data_config
3333

3434
itk, has_itk = optional_import("itk", allow_namespace_pkg=True)
@@ -436,6 +436,11 @@ def test_my_reader(self):
436436
self.assertEqual(out.meta["name"], "my test")
437437
out = LoadImage(image_only=True, reader=_MiniReader, is_compatible=False)("test")
438438
self.assertEqual(out.meta["name"], "my test")
439+
440+
def test_reader_not_installed_exception(self):
441+
"""test if an exception is raised when a specified reader is not installed"""
442+
with self.assertRaises(OptionalImportError):
443+
LoadImage(image_only=True, reader="NonExistentReader")("test")
439444
for item in (_MiniReader, _MiniReader(is_compatible=False)):
440445
out = LoadImage(image_only=True, reader=item)("test")
441446
self.assertEqual(out.meta["name"], "my test")

0 commit comments

Comments
 (0)