例如:
unpacked_data = [10000, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99]
expected_data = [10000, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99]
response_data = [10000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99]
因此,即使 unpacked_data 和 expected_data 的內容相同,它們也不會被判斷為相等。
以下程式片斷:
if unpacked_data == expected_data:
packed_data_to_send = struct.pack('16i', *response_data)
client_socket.sendall(packed_data_to_send)
print('Sent', repr(response_data))
else:
client_socket.sendall(b'ERROR DATA')
print('Sent ERROR DATA')
總是會執行else: client_socket.sendall(b'ERROR DATA')。
解決方法是將3個列表(list)定義為元組(tuple)。元組可以與另一個元組比較,如果元組中的元素相同,則會返回 True。這樣一來,就可以使用 == 來比較 unpacked_data 和 expected_data,而不需要任何進一步的處理。
把列表[ ]改為元組( )就可解決。
unpacked_data = (10000, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99)
expected_data = (10000, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99)
response_data = (10000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99)
註(note):
串列(List):
ex: list=[01, 23, 45, 67, 89 ]
元組(Tuple):
ex: number = (1, 2, 3 ,4 ,5)
沒有留言:
張貼留言