Pular para o conteúdo

Python / Sockets - AttributeError: 'str' object has no attribute 'append' [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar

1. Python / Sockets - AttributeError: 'str' object has no attribute 'append' [RESOLVIDO]

Enviado em 29/11/2015 - 15:55h

galera to estudando um poco python com sockets, encontrei em uma pesquisa pela internet um tutorial interessante mas logo no primeiro exercício fazendo um tcp client simples me deparei com esse erro.

segue o código que eu escrevi:


from socket import *
s = socket(AF_INET, SOCK_STREAM)
s.connect(("www.google.com",80))
s.send("GET /index.html HTTP/1.0\r\n\r\n")
pedacos = []
while True:
pedacos = s.recv(10000)
if not pedacos:
break
pedacos.append(pedacos)
s.close
resposta = "".join(pedacos)
print (resposta)


na hora de executar eu recebo esse erro no terminal

Traceback (most recent call last):
File "tcp_client.py", line 10, in <module>
pedacos.append(pedacos)
AttributeError: 'str' object has no attribute 'append'

eu já ganhei que o erro está nessa lista que junta os dados fragmentados no retorno da comunicação porque se eu modifico o código da seguinte forma:


from socket import *
s = socket(AF_INET, SOCK_STREAM)
s.connect(("www.google.com",80))
s.send("GET /index.html HTTP/1.0\r\n\r\n")
resposta = s.recv(10000)
s.close
print (resposta)


o script funciona corretamente.

O que eu devo fazer para que o primeiro script funcione corretamente?

Responder tópico

2. Re: Python / Sockets - AttributeError: 'str' object has no attribute 'append' [RESOLVIDO]

Melhor resposta

Enviado em 30/11/2015 - 04:03h

Já percebeu que está atribuindo a variável pedacos como uma lista e logo após esta sobreescrevendo ela com o resultado do socket?
O correto seria como abaixo:
from socket import *
s = socket(AF_INET, SOCK_STREAM)
s.connect(("www.google.com",80))
s.send("GET /index.html HTTP/1.0\r\n\r\n")
pedacos = []
while True:
resultado = s.recv(10000)
if not resultado:
break
pedacos.append(resultado)
s.close
resposta = "".join(pedacos)
print (resposta)

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder