如何修复服务器错误AttributeError的响应解包:“tuple”对象没有属性“tag”

2024-10-02 10:32:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我收到一个来自网络服务器的响应,试图解压响应并在屏幕上显示出来,但是遇到了错误

 AttributeError: 'tuple' object has no attribute 'tag'

我想这可能和我如何调用上面的变量有关。请别忘了我是python和socket编程的新手

无论如何,响应格式有三个部分

       TYPE  OFFSET
 tag   uint32    0
 code  uint32    4
 message string  8

应显示:Tag:1(或anynumber) 代码:200(成功) 留言:“嘿”

            import socket
            import struct
            import textwrap

            TCP_IP = '127.0.0.1'
            TCP_PORT = 4200

            TAB_1 = '\t - '
            TAB_2 = '\t\t - '
            TAB_3 = '\t\t\t - '
            TAB_4 = '\t\t\t\t - '

            DATA_TAB_1 = '\t   '
            DATA_TAB_2 = '\t\t   '
            DATA_TAB_3 = '\t\t\t   '
            DATA_TAB_4 = '\t\t\t\t   '

            def main():
                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                s.connect(("127.0.0.1", 4200))

                packet = struct.pack('ii', 1,4)

                s.send(packet)

                while True:
                    response, addr = s.recvfrom(65535)
                    print(response.__sizeof__())
                    bny = binary_response(response)
                    print(TAB_1 + 'Binary Response Segment:')
                    print(TAB_2 + 'Tag: {}, Code: {}' + bny.tag, bny.code)
                    print(TAB_2 + 'Message: ' + bny.response)


            # Unpack binary_response
            def binary_response(response):
                tag, code = struct.unpack('i i', response[:12])
                return tag, code, response[12:]




            main()

Tags: importdataresponsedeftagcodesockettab
1条回答
网友
1楼 · 发布于 2024-10-02 10:32:16

正如错误消息所说,binary_response()返回一个元组,但是您试图访问返回的标记值,就好像它是一个属性一样。不是的

因为tag是返回元组中的第一个元素,所以使用bny[0]而不是bny.tag

相关问题 更多 >

    热门问题