> the time raises "KeyError" should actually be typed "Raises[T, KeyError]"
You can't do this in Python your bucket will always have hole you can't plug. Arbitrary exceptions can appear anywhere in your code thanks to signal handlers.
KeyboardInterrupt is the one you probably know without knowing.
Exceptions can even come from higher in the stack down to you with the .throw method on generators.