Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Post History
but I don't think I can count on that working There really doesn't seem to be a ready-to-use way to get that message (which feels like a good feature-request). While ex.args[0].args[-1] is in...
Answer
#1: Initial revision
> but I don't think I can count on that working There really doesn't seem to be a ready-to-use way to get that message (which feels like a good feature-request). While `ex.args[0].args[-1]` is indeed not robust, you could make an error-processor that uses `isinstance` + `getattr` + ... to handle more cases; something like this: def exc_to_message(exc: Exception) -> str: reason = getattr(exc, 'reason', None) if reason: if isinstance(reason, bytes): reason = reason.decode('utf-8', errors='replace') return reason if exc.args: arg = exc.args[0] if isinstance(arg, Exception) and arg is not exc: message = exc_to_message(arg) if message: return message # fallback 1 return str(arg) # fallback 2 return str(exc) which is more a proof-of-concept than a complete solution; I think a better solution would require changes in urllib3. Just getting a clear "connection refused at {host}:{port}" right now would require regexes.