For maximum compatibility `InvalidRedirect` will have to subclass several different built-in exceptions and I'll have to audit both `urlparse` and `urllib3` to make sure everything relevant is covered.  The cases I know about are

    Location: http://example[^.com/]   => urlparse throws ValueError("Invalid IPv6 URL")
    Location: http://@                          => urllib3.ConnectionPool.__init__ tries to call `strip()` on `None`,
                                                               which throws AttributeError

urlparse (the module) can potentially also throw TypeError and UnicodeError, but it is not immediately clear to me whether *requests' use of urlparse* can throw those exceptions.