Я бы порекомендовал изменить код, который создает строку таким странным образом.
Если это невозможно:
Откуда эта строка? Это надежный источник или он исходит от веб-сервера или человека, который может захотеть взломать / сломать ваш компьютер?
Действительно ли строка создана с помощью str(b)[2:-1]
или это всего лишь приближение к реальной проблема?
Я спрашиваю, так как это немного усложняет задачу. (Требуется добавить try
/ except
)
Следующий код должен работать:
from ast import literal_eval
def stripped_str_b_to_bytes(s):
try:
return literal_eval("b'" + s + "'")
except SyntaxError:
return literal_eval('b"' + s + '"')
testvalues = [
b"A'B",
b'A"B',
bytes([v for v in range(256)]),
]
for b in testvalues:
print("testing with ", b)
s = b[2:-1]
print("S =", s)
c = stripped_str_b_to_bytes(s)
assert b == c
Он пытается добавить b'
и '
к s
и оцените эту строку как выражение python.
Если это не сработает, тогда он пытается добавить b"
и "
к s
и вычислить его.