1) If loads fails in the way you are anticipating, it will raise a particular exception, probably ValueError, so you should catch only that exception.

2) Are we sure that old data won't accidentally be json-loadable, and json.load() will succeed, but return the wrong value?  This would certainly be true if any of our code stored the result of json.dumps() in a string field.