我从通过以太网连接的外部设备获得输入,并且它传递了几个字符串类型的值,例如value = '(2,2)\n'
。我想将这些值分配给列表或元组变量,例如final_value = (2,2)
。
我正在使用的代码如下:
import socket
sock = socket.socket()
value =sock.recv(buffersize=2048)
formatted_value = eval(value)
我读到我此时使用的 eval 函数来获取列表并不是一种非常安全的方法,因为外部设备可以传递危险的脚本。所以,我想知道是否有任何替代方法,类似于函数int(),它可以用来从字符串中获取整数。
答案 0 :(得分:4)
使用ast模块literal_eval方法获得更安全的评估
import ast
formatted_value = ast.literal_eval(value)
答案 1 :(得分:1)
如果知道,则输入包含元组
from ast import literal_eval as make_tuple
make_tuple(value)
答案 2 :(得分:0)
很好地提供你可以做的替代方法。
s = '(2, 2)\n'
s = s.strip()
if s.startswith('(') and s.endswith(')'):
tup = tuple(int(i) for i in s[1:-1].split(','))
print(tup)
或者如果你想要一个清单
s = '(2, 2)\n'
s = s.strip()
if s.startswith('(') and s.endswith(')'):
lst = [int(i) for i in s[1:-1].split(',')]
print(lst)