Как использовать несколько строковых литералов одновременно - PullRequest
0 голосов
/ 19 мая 2018

У меня есть строка байтов, которую я пытаюсь использовать в re:

user_name = 'Simon'
string = 'Hello {user_name}, nice to see you! :)'

Однако, наряду с использованием байтов, строка re должна быть необработанной строкой (r).

Так как я могу указать байты, f-строки и необработанные строки одновременно?

Я пытался:

user_name = rb'Simon'
string = brf'Hello {user_name}, nice to see you! :)'

Но:

In [1]: user_name = rb'Simon'
   ...: string = brf'Hello {user_name}, nice to see you! :)'
  File "<ipython-input-8-93fb315cc66f>", line 2
    string = brf'Hello {user_name}, nice to see you! :)'
                                                       ^
SyntaxError: invalid syntax


In [2]:

Я также пытался format(), но это не удалось:

In [2]: string = br'Hello {}, nice to see you! :)'.format(user_name)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-9-36faa39ba31d> in <module>()
----> 1 string = br'Hello {}, nice to see you! :)'.format(user_name)

AttributeError: 'bytes' object has no attribute 'format'

In [3]:

Как можно указать несколько строковых литералов?

1 Ответ

0 голосов
/ 19 мая 2018

Строковая интерполяция ограничена строками и не может использоваться для байтов .Это адрес в PEP :

По той же причине, по которой мы не поддерживаем bytes.format(), вы не можете объединять 'f' со строковыми литералами 'b'.Основная проблема заключается в том, что метод __format__() объекта может возвращать данные Unicode, которые не совместимы со строкой байтов.


Обходной путь заключается в ручном кодировании строки в байты:

>>> rf'Hello {user_name}, nice to see you! :)'.encode()
b'Hello Simon, nice to see you! :)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...