Why must we catch/raise here rather than a level higher in the stack which calls `.read(...)` and already knows what the URL is?

(I'd like to avoid increasing coupling by adding callers' context to lower level objects.)