How do you propose handling an OOB index in an array?
For errors, you should do error handling, which means you want the compiler to make sure you don't miss them.
For bugs, you want to let the program bomb out, either aborting entirely or stopping at some high-level boundary from which it's possible to sanely continue. In Java, unchecked exceptions are a mostly adequate mechanism for that. Rust's catch_unwind is better, because it makes stronger guarantees [1]. Erlang's approach of terminating the thread and throwing away its heap is also very good, if you can apply that.
[0] http://joeduffyblog.com/2016/02/07/the-error-model/#bugs-are...
[1] https://doc.rust-lang.org/std/panic/fn.catch_unwind.html
try:
x = json['foo']['bar'][i]
catch OOB:
handle error
than to if not (json is a dict and
'foo' in json and
json['foo'] is a dict and
...):
handle error
x = json['foo']['bar'][i]
even though in the former, unchecked exceptions are used for non-bugs.