Fix UnicodeDecodeError in annotate_excpetion #564
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi,
this fixes a somewhat special problem: We are using lua scripts in redis in combination with pipelining and msgpack (using python 2.x).
In case of an error redis-py tries to build a proper error message using the annotate_exception method. When building the message it converts everything to unicode. The problem: This can fail as one or more parts might not be proper unicode. In our case this is due to using msgpack. That means that building the exception causes an exception (UnicodeEncodeError), hiding the original redis error.
The change I propose is to relax the unicode conversion by using a safe approach to convert the string. That fixes the UnicodeEncodeError which in turn gives me the real error message and the right exception (ResponseError).
Please have a look at the unit test, which shall document it better than my explanation above.
I tested both python2 and python3 (as you will see, there is basically no change for python3)
Hendrik