From fcbf77cb9a101bc7733943a6f8e12aad2877acf5 Mon Sep 17 00:00:00 2001 From: Colm Talbot <colm.talbot@ligo.org> Date: Mon, 11 Oct 2021 13:12:44 +0000 Subject: [PATCH] Catch incomplete JSON files being read. --- bilby/core/result.py | 9 ++++++++- test/core/result_test.py | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/bilby/core/result.py b/bilby/core/result.py index 060ce6430..99efa4912 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 b2a7c24c1..f49e4a3a2 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", -- GitLab