Nick Coghlan added the comment:
New and improved implementation attached that extracts the exception chaining
to a helper functions and calls it only when it is the call in to the codecs
machinery that failed (eliminating the need for the output flag, and covering
decoding as well as encoding).
TypeError, AttributeError and ValueError are all wrapped with chained
exceptions that mention the codec that failed.
(Annoyingly, bz2_codec throws OSError instead of ValueError for bad input data,
but wrapping OSError safely is a pain due to the extra state potentially
carried on instances. So letting it escape unwrapped is the simpler and more
conservative option at this point)
>>> import codecs
>>> codecs.encode(b"hello", "bz2_codec").decode("bz2_codec")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'bz2_codec' decoder returned 'bytes' instead of 'str'; use
codecs.decode to decode to arbitrary types
>>> b"hello".decode("rot_13")
AttributeError: 'memoryview' object has no attribute 'translate'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: decoding with 'rot_13' codec failed (AttributeError:
'memoryview' object has no attribute 'translate')
>>> "hello".encode("bz2_codec")
TypeError: 'str' does not support the buffer interface
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: encoding with 'bz2_codec' codec failed (TypeError: 'str' does not
support the buffer interface)
>>> "hello".encode("rot_13")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'rot_13' encoder returned 'str' instead of 'bytes'; use
codecs.encode to encode to arbitrary types
----------
Added file:
http://bugs.python.org/file32508/issue17828_improved_codec_errors_v3.diff
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue17828>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com