2024-05-12 13:59:28 发布
网友
我把一个字节作为输入 b'\xe2I4\xdd\r\xe5\xfcy^4\xd5'
但它被转换成字符串
因此,当我试图将该字符串转换为字节时,它再次对其进行操作,并将输出作为:
b"b'\\xe2I4\\xdd\\r\\xe5\\xfcy^4\\xd5'"
我希望的输出是,当我提供b'\xe2I4\xdd\r\xe5\xfcy^4\xd5'时,它会将其转换为字节,而无需操作或添加任何字符或符号
任何资源或参考资料都会有所帮助
提前感谢
您可以将input()的值传递给eval()函数。函数eval()直接计算字符串,就像它是在Python中直接执行的一样。虽然一开始它可能感觉是最好的功能,但由于同样的原因,在任何生产级应用程序中使用它几乎是不安全的,因为用户可以使用可能导致很多问题的代码执行任何代码
input()
eval()
您可以使用比eval()更安全的替代方法,即ast.literal_eval()。此函数将给定字符串计算为Python文本(如字符串、数字、字节对象等)。如果字符串不包含任何文本(如函数调用、对象创建、赋值等),此函数将抛出错误。够了,让我们看看你是怎么做到的
ast.literal_eval()
import ast user_input = input() eval_expr = ast.literal_eval(user_input)
如果要检查输入是否为bytes文字,可以使用isinstance函数进行检查,然后执行所需的操作
bytes
isinstance
# Optional: Handle if `eval_expr` is not a `bytes` literal if not isinstance(eval_expr, bytes): ...
因此,您只需首先导入模块ast。然后接受用户的输入。然后将此输入字符串传递给ast.literal_eval()函数以计算字符串
ast
坏主意
您可以将
input()
的值传递给eval()
函数。函数eval()
直接计算字符串,就像它是在Python中直接执行的一样。虽然一开始它可能感觉是最好的功能,但由于同样的原因,在任何生产级应用程序中使用它几乎是不安全的,因为用户可以使用可能导致很多问题的代码执行任何代码更好的选择
您可以使用比
eval()
更安全的替代方法,即ast.literal_eval()
。此函数将给定字符串计算为Python文本(如字符串、数字、字节对象等)。如果字符串不包含任何文本(如函数调用、对象创建、赋值等),此函数将抛出错误。够了,让我们看看你是怎么做到的如果要检查输入是否为
bytes
文字,可以使用isinstance
函数进行检查,然后执行所需的操作因此,您只需首先导入模块
ast
。然后接受用户的输入。然后将此输入字符串传递给ast.literal_eval()
函数以计算字符串相关问题 更多 >
编程相关推荐