@@ -117,18 +117,41 @@ def read_in_result(filename=None, outdir=None, label=None, extension=None, gzip=
117117 if extension == 'gz' : # gzipped file
118118 extension = os .path .splitext (os .path .splitext (filename )[0 ])[1 ].lstrip ('.' )
119119
120- if 'json' == extension :
121- result = result_class .from_json (filename = filename )
122- elif extension in ['hdf5' , 'h5' ]:
123- result = result_class .from_hdf5 (filename = filename )
124- elif extension in ['pkl' , 'pickle' ]:
125- result = result_class .from_pickle (filename = filename )
126- elif extension is None :
120+ if extension is None :
121+ raise ValueError ("No filetype extension provided and could not be inferred from filename" )
122+
123+ extension = extension .lower ()
124+ read_functions = {
125+ 'json' : result_class .from_json ,
126+ 'hdf5' : result_class .from_hdf5 ,
127+ 'h5' : result_class .from_hdf5 ,
128+ 'pkl' : result_class .from_pickle ,
129+ 'pickle' : result_class .from_pickle ,
130+ }
131+ if extension not in read_functions :
127132 raise ValueError (
128- "No filetype extension provided and could not be inferred from filename "
133+ f"Filetype { extension } not understood, known types are { list ( read_functions . keys ()) } "
129134 )
130- else :
131- raise ValueError ("Filetype {} not understood" .format (extension ))
135+
136+ func = read_functions [extension ]
137+
138+ # Raise IO errors since this is what the caching relies on
139+ # Catch all other exceptions and raise a FileLoadError
140+ try :
141+ result = func (filename = filename )
142+ except IOError :
143+ raise IOError (
144+ f"Failed to read in file { filename } using "
145+ f"`{ result_class .__name__ } .{ func .__name__ } ` "
146+ f"(extension={ extension } ). "
147+ "This is likely because the file does not exist or is not a valid bilby result."
148+ )
149+ except Exception as e :
150+ raise FileLoadError (
151+ f"Failed to read in file { filename } using "
152+ f"`{ result_class .__name__ } .{ func .__name__ } ` "
153+ f"(extension={ extension } ). The error was: { e } "
154+ ) from e
132155 return result
133156
134157
@@ -815,6 +838,10 @@ def save_to_file(self, filename=None, overwrite=False, outdir=None,
815838 # if not, it will fall back to the default
816839 if ext in EXTENSIONS :
817840 if extension is None :
841+ logger .debug (
842+ f"Inferred extension '{ ext } ' from filename '{ filename } '. "
843+ "Using this extension for saving."
844+ )
818845 extension = ext
819846 elif ext != extension :
820847 message = (
@@ -824,6 +851,7 @@ def save_to_file(self, filename=None, overwrite=False, outdir=None,
824851 logger .warning (message )
825852
826853 if extension is None :
854+ logger .info ("No extension given, defaulting to JSON." )
827855 extension = 'json'
828856
829857 if extension is True :
@@ -2312,3 +2340,7 @@ class ResultListError(ResultError):
23122340
23132341class FileMovedError (ResultError ):
23142342 """ Exceptions that occur when files have been moved """
2343+
2344+
2345+ class FileLoadError (ResultError ):
2346+ """ Exceptions that occur when files cannot be loaded """
0 commit comments