Search code examples
pythonpython-3.xstring-interpolationf-string

Is there a formatted byte string literal in Python 3.6+?


I'm looking for a formatted byte string literal. Specifically, something equivalent to

name = "Hello"
bytes(f"Some format string {name}")

Possibly something like fb"Some format string {name}".

Does such a thing exist?


Solution

  • 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, or

    • having bytes.format() not be as general purpose or extensible as str.format().

    Both of these remain as options in the future, if such functionality is desired.