我有一個問題,然后通過套接字發送一個串列,
它必須是類似位元組的物件,好吧,我可以將其轉換為
字串然后執行.encode("utf-8"),但
這里的問題是它是字串,并且很難從中重建它的
串列字串,literal_eval()從ast庫
沒有作業然后我有這樣的事情:
[("Something", datetime.datetime(2021, 12, 11, 0, 0))]
這就是問題,我必須擁有這些物件,我的
問題是如何發送 python 物件而無需
將其轉換為字串,或者
像 JSON這樣的某種物件符號?
這可以在
Python Socket Documentation 中的基本套接字服務器上進行測驗。
失敗的文字 Eval:
from ast import literal_eval
new_line = literal_eval("[(2, 2.0, 'MS-0150886', 'B1A', 'MP5 TEST IS HERE!', None, None, datetime.datetime(2021, 8, 13, 0, 0), datetime.datetime(2021, 8, 13, 0, 0), 38.0, None, None, '1', None, None, None, 1.0, None, 1.0, 'KS-005418-2', 'KS-005419-1', 'SPRAWDZ 9', None, None, None, 1.0, None, None, None, None, 1.0, 1)]")
print(new_line)
print(type(new_line))
錯誤:
Traceback (most recent call last):
File "C:\I deleted\this path\test.py", line 3, in <module>
new_line = literal_eval("[(2, 2.0, 'MS-0150886', 'B1A', 'MP5 TEST IS HERE!', None, None, datetime.datetime(2021, 8, 13, 0, 0), datetime.datetime(2021, 8, 13, 0, 0), 38.0, None, None, '1', None, None, None, 1.0, None, 1.0, 'KS-005418-2', 'KS-005419-1', 'SPRAWDZ 9', None, None, None, 1.0, None, None, None, None, 1.0, 1)]")
File "C:\Program Files\Python39\lib\ast.py", line 105, in literal_eval
return _convert(node_or_string)
File "C:\Program Files\Python39\lib\ast.py", line 85, in _convert
return list(map(_convert, node.elts))
File "C:\Program Files\Python39\lib\ast.py", line 83, in _convert
return tuple(map(_convert, node.elts))
File "C:\Program Files\Python39\lib\ast.py", line 104, in _convert
return _convert_signed_num(node)
File "C:\Program Files\Python39\lib\ast.py", line 78, in _convert_signed_num
return _convert_num(node)
File "C:\Program Files\Python39\lib\ast.py", line 69, in _convert_num
_raise_malformed_node(node)
File "C:\Program Files\Python39\lib\ast.py", line 66, in _raise_malformed_node
raise ValueError(f'malformed node or string: {node!r}')
ValueError: malformed node or string: <ast.Call object at 0x000001B82F7CDDF0>
uj5u.com熱心網友回復:
你試了pickle嗎?
import pickle
# Client
data = [("Something", datetime.datetime(2021, 12, 11, 0, 0))]
s.sendall(pickle.dumps(data))
# Server
data = pickle.loads(conn.recv(1024))
print(data)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/387201.html
