Demian Brecht added the comment:

Thanks for the update, but this doesn't quite work either as you're assuming 
utf-8 (which is what .encode() and .decode() default to). For example, when 
using latin-1:

>>> m = mock_open(read_data= b'\xc6')
>>> with patch('__main__.open', m, create=True) :
...     with open('abc', 'rb') as f :
...         print(f.read())
...
Traceback (most recent call last):
  [snip]
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc6 in position 0: 
unexpected end of data

Additionally, a bytes object may simply be binary data that doesn't adhere to 
any specific encoding.

My suggestion is to remove the use of format() altogether as it's really not 
doing anything complex and simply append either '\n' or b'\n' depending on the 
type of object passed in. That way, you can deal with the type of object passed 
in directly without coercion.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue23004>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to