diff --git a/nibabel/loadsave.py b/nibabel/loadsave.py index 1dc576498b..c239c1a568 100644 --- a/nibabel/loadsave.py +++ b/nibabel/loadsave.py @@ -9,7 +9,7 @@ # module imports """ Utilities to load and save image objects """ -import os.path as op +import os import numpy as np from .filename_parser import splitext_addext @@ -36,8 +36,12 @@ def load(filename, **kwargs): img : ``SpatialImage`` Image of guessed type ''' - if not op.exists(filename): - raise FileNotFoundError("No such file: '%s'" % filename) + try: + stat_result = os.stat(filename) + except OSError: + raise FileNotFoundError("No such file or no access: '%s'" % filename) + if stat_result.st_size <= 0: + raise ImageFileError("Empty file: '%s'" % filename) sniff = None for image_klass in all_image_classes: is_valid, sniff = image_klass.path_maybe_image(filename, sniff) diff --git a/nibabel/tests/test_loadsave.py b/nibabel/tests/test_loadsave.py index a5f36100d9..676c09c121 100644 --- a/nibabel/tests/test_loadsave.py +++ b/nibabel/tests/test_loadsave.py @@ -58,6 +58,14 @@ def test_file_not_found(): assert_raises(FileNotFoundError, load, 'does_not_exist.nii.gz') +def test_load_empty_image(): + with InTemporaryDirectory(): + open('empty.nii', 'w').close() + with assert_raises(ImageFileError) as err: + load('empty.nii') + assert_true(err.exception.args[0].startswith('Empty file: ')) + + def test_read_img_data_nifti(): shape = (2, 3, 4) data = np.random.normal(size=shape)