This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: str(b'text') returns "b'text'" in interpreter
Type: behavior Stage: resolved
Components: Interpreter Core Versions: Python 3.4
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: devplayer, ned.deily
Priority: normal Keywords:

Created on 2014-07-11 02:57 by devplayer, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
str bug.bmp devplayer, 2014-07-11 02:57 py.exe console showing str bug
Messages (2)
msg222718 - (view) Author: Dev Player (devplayer) Date: 2014-07-11 02:57
str(b'text') returns double quoted item with b prefix within the str() object as so: "b'text'" in python interpreter. It seems the "b" shouldn't be within the outter quotes or apart of the str() instance data.

Is this a bug or new syntax? I personally haven't see any documentation that this is the correct behavior. Nor did I find any previously register issue tickets.

>>>bchars_list = [b'o', b'n', b'e']
>>>bchars_list
[b'o', b'n', b'e']
>>>[str(x) for x in bchars_list]
["b'o'", "b'n'", "b'e'"]
msg222724 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2014-07-11 05:30
This is as expected.  In Python 3, b'text' represents a bytes object.  "Passing a bytes object to str() without the encoding or errors arguments falls under the first case of returning the informal string representation".
Also, in the case of simple bytes objects, their str() representation is the same as their repr() representation.  For many simple types, the repr() representation of an object allows you to recover the object by using eval().

>>> b'one'
b'one'
>>> type(b'one')
<class 'bytes'>
>>> str(b'one')
"b'one'"
>>> repr(b'one')
"b'one'"
>>> eval(repr(b'one'))
b'one'
>>> b'one'.decode('ascii')
'one'

https://docs.python.org/3/library/stdtypes.html#str
https://docs.python.org/3/library/functions.html#repr

Python 2 (as of 2.6) accepts b'text' literals to make writing code compatible with both Py2 and Py3 easier.  However, Py2 treats b'text' the same as 'text'.

>>> b'one'
'one'
>>> type(b'one')
<type 'str'>
>>> str(b'one')
'one'
>>> b'one'.decode('ascii')
u'one'

https://docs.python.org/2/whatsnew/2.6.html#pep-3112-byte-literals
History
Date User Action Args
2022-04-11 14:58:05adminsetgithub: 66153
2014-07-11 05:30:45ned.deilysetstatus: open -> closed

nosy: + ned.deily
messages: + msg222724

resolution: not a bug
stage: resolved
2014-07-11 02:57:23devplayercreate