Converting python string into bytes directly witho

2019-02-28 08:47发布

问题:

eval() seems to be dangerous to use when processing unknown strings, which is what a part of my project is doing.

For my project I have a string, called:

stringAsByte = "b'a'"

I've tried to do the following to convert that string directly (without using eval):

byteRepresentation = str.encode(stringAsByte)
print(byteRepresentation) # prints b"b'a'"

Clearly, that didn't work, so instead of doing:

byteRepresentation = eval(stringAsByte) # Uses eval!

print(byteRepresentation) # prints b'a'

Is there another way where I can get the output b'a'?

回答1:

yes, with ast.literal_eval which is safe since it only evaluates literals.

>>> import ast
>>> stringAsByte = "b'a'"
>>> ast.literal_eval(stringAsByte)
b'a'