To avoid this problem, higher layers should catch lower-level exceptions and, in their place, throw exceptions that can be explained in terms of the higher-level abstraction. This idiom is known as exception translation:
I'll share my more general version of this recommendation: a layer should insulate the layer above it from the later below it. Ideally, a layer should not know anything about the layer two layers down (how it works or how it's implemented). The implementation of that layer (two down) should be able to be swapped out without affecting the one two above it.
Heeding this should bring to question: If your layer can't insulate its higher and lower layers, is that layer necessary?