We use the error code to detect the failure and in turn raise the appropriate exception type.
All the other drivers do the same, and do whack them when they detect changed error codes since their excepted exception names are no longer thrown