Message354731
The documentation might be unclear here. But the argument iterator of
iterdecode(iterator, encoding, errors='strict', **kwargs)
*is* supposed to be an iterable over bytes objects.
In fact iterencode() transforms an iterator over strings into an iterator over bytes and iterdecode() transforms an iterator over bytes into an iterator over strings.
Since iterating over strings iterates over the characters, it's possible to pass a string to iterencode(). However it's not possible to pass a bytes object to iterdecode() since iterating over a bytes object yields integers:
>>> import codecs
>>> list(codecs.iterencode(['spam'], 'utf-8'))
[b'spam']
>>> list(codecs.iterencode('spam', 'utf-8'))
[b's', b'p', b'a', b'm']
>>> list(codecs.iterdecode([b'spam'], 'utf-8'))
['spam']
>>> list(codecs.iterdecode(b'spam', 'utf-8'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/codecs.py", line 1048, in iterdecode
output = decoder.decode(input)
File "/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/codecs.py", line 321, in decode
data = self.buffer + input
TypeError: can't concat int to bytes |
|
Date |
User |
Action |
Args |
2019-10-15 14:04:43 | doerwalter | set | recipients:
+ doerwalter, serhiy.storchaka, jamercee |
2019-10-15 14:04:43 | doerwalter | set | messageid: <1571148283.89.0.752256063936.issue38482@roundup.psfhosted.org> |
2019-10-15 14:04:43 | doerwalter | link | issue38482 messages |
2019-10-15 14:04:43 | doerwalter | create | |
|