diff --git a/bilby/core/result.py b/bilby/core/result.py index 060ce6430d36412158500a07314b947fe27a2665..99efa4912244595ffb2db0ab5e125234bea3eb59 100644 --- a/bilby/core/result.py +++ b/bilby/core/result.py @@ -538,10 +538,17 @@ class Result(object): @classmethod @docstring(_load_doctstring.format(format="json")) def from_json(cls, filename=None, outdir=None, label=None, gzip=False): + from json.decoder import JSONDecodeError + filename = _determine_file_name(filename, outdir, label, 'json', gzip) if os.path.isfile(filename): - dictionary = load_json(filename, gzip) + try: + dictionary = load_json(filename, gzip) + except JSONDecodeError as e: + raise IOError( + "JSON failed to decode {} with message {}".format(filename, e) + ) try: return cls(**dictionary) except TypeError as e: diff --git a/test/core/result_test.py b/test/core/result_test.py index b2a7c24c1776f295fe0964094b42242c00704bd0..f49e4a3a25727f45d268df0952cc4659ebd9d1be 100644 --- a/test/core/result_test.py +++ b/test/core/result_test.py @@ -134,6 +134,25 @@ class TestResult(unittest.TestCase): with self.assertRaises(IOError): bilby.core.result.read_in_result(filename="not/a/file.json") + with self.assertRaises(IOError): + incomplete_json = """ +{ + "label": "label", + "outdir": "outdir", + "sampler": "dynesty", + "log_evidence": 0, + "log_evidence_err": 0, + "log_noise_evidence": 0, + "log_bayes_factor": 0, + "priors": { + "chirp_mass": { +""" + with open("{}/incomplete.json".format(self.result.outdir), "wb") as ff: + ff.write(incomplete_json) + bilby.core.result.read_in_result( + filename="{}/incomplete.json".format(self.result.outdir) + ) + def test_unset_priors(self): result = bilby.core.result.Result( label="label",