Is there a formatted byte string literal in Python 3.6+?
Solution 1:
No. The idea is explicitly dismissed in the PEP:
For the same reason that we don't support
bytes.format()
, you may not combine'f'
with'b'
string literals. The primary problem is that an object's__format__()
method may return Unicode data that is not compatible with a bytes string.Binary f-strings would first require a solution for
bytes.format()
. This idea has been proposed in the past, most recently in PEP 461. The discussions of such a feature usually suggest either
adding a method such as
__bformat__()
so an object can control how it is converted to bytes, orhaving
bytes.format()
not be as general purpose or extensible asstr.format()
.Both of these remain as options in the future, if such functionality is desired.
Solution 2:
In 3.6+ you can do:
>>> a = 123
>>> f'{a}'.encode()
b'123'