entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

-1voto

Error en Python 3.6 usando sockets "unsupported operand type(s) for +"

en mi anterior pregunta tuve un error con la clase socket y ahora tengo otro error

server

import socket

host = "127.0.0.1"
port = 6666

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print ("Socket Created")
sock.bind((host, port))
print ("socket bind complete")
sock.listen(1)
print ("socket now listening")

while 1:
    conn, addr = sock.accept()
    print ('Connected with ') + addr[0] + ':' + str(addr[1])

sock.close()

output

Socket Created
socket bind complete
socket now listening
Connected with

traceback (most recent call last):
file "server.py", line 18 in <module>
print("connected with") + addr[0] + ":" str(addr[1])
typeError : unsupported operand type(s) for +: 'NoneType' and 'str'

cliente

import socket

host = "127.0.0.1"
port = 6666

sock = socket.socket()

sock.connect((host, port))

while True:

  message = input("envia un mensaje")
  sock.send(message.encode('utf-8'))

  if message == "quit":
    break

  print("bye")
  sock.close()

1voto

carlossevi comentado

El error es tan fácil de interpretar que parece mentira que ya hayas hecho varias preguntas sobre Python... Revisa la sintáxis de la línea que te indica a ver si encuentras algún error.

0voto

steven comentado

no recuerdo haber hecho las mismas preguntas, si es asi te pido disculpas he retomado con python, sin embaro para mi no es tan facil de interpretar, no entiendo que hay de malo en esta linea

    print ('Connected with ') + addr[0] + ':' + str(addr[1])

0voto

Peter comentado

¿Sabes cual es el error?

0voto

steven comentado

negativo, cual puede ser segun tu

0voto

Peter comentado

¿No sabes cual es el error que tienes que corregir?

No me refiero a la solución, si no a que error te esta dando y que te dice el error.

1voto

carlossevi comentado

@Peter ha dado en el clavo: el error y su solución son dos cosas distintas. Para poder aprender de este error, necesitas entender cuál es, y no que simplemente te demos la solución. Céntrate en el mensaje:

traceback (most recent call last):
file "server.py", line 18 in <module>
print("connected with") + addr[0] + ":" str(addr[1])
typeError : unsupported operand type(s) for +: 'NoneType' and 'str'

0voto

steven comentado

segun el error no soporta algun operador, no entiendo cual de ellos y porque

0voto

carlossevi comentado

El error te está diciendo que el operador '+' no puede operar con los tipos 'NoneType' y 'str'. Busca dónde estás usando ese operador...

0voto

steven comentado

y que puedo hacer al respecto, cual seria el operardor nonetype

1 Respuesta

1voto

carlossevi Puntos63580

Que conste en acta que según los comentarios anteriores, no has gastado ni una gota de esfuerzo en entender el mensaje de error ni leer documentación.

El error te está diciendo que el operador '+' no puede operar con los tipos 'NoneType' y 'str'. Veamos los usos que haces del operador en la línea del error:

print ('Connected with ') + addr[0] + ':' + str(addr[1])
                          ^         ^     ^

Supongo que el tipo 'str' lo conoces, es la cadena de texto. ¿Qué es el tipo 'NoneType'? Pues precisamente es el tipo de variable de una variable que no tiene valor.

El mensaje de error te dice que no puedes "sumar" (utilizar el operador '+' de adición) a una cadena de texto un elemento con valor nulo. ¿Y por qué?

Porque estás estás intentando concatenar la cadena addr[0] con el valor devuelto por print ('Connected with ') ¡que no devuelve ningún valor!

Parece ser que tienes un error con los paréntesis y el orden que se hacen las operaciones, porque seguramente querrás hacer la concatenación antes de imprimir el mensaje, y no después.

print ('Connected with ' + addr[0] + ':' + str(addr[1]))

-1voto

steven comentado

si pero mi problema requiere minimo un nivel avanzado de programacion orientado a obejetos y a redes, entiendo que puede ser un poco aburrido responder a un novato pero recuerda que ya hemos casi terminado, lo unico que falta es comunicar el server con el cliente, esto es mi ultimo deseo

0voto

carlossevi comentado

Si considerase aburrido responder a un novato, no estaría aquí respondiendo preguntas. El problema no es que seas novato, no te confundas. El problema, repito una y mil veces, es que no tratas de estudiar ni entender lo que se te dice. En esta pregunta, ya he respondido a tu problema, no más deseos.

0voto

steven comentado

si pero el codigo no hace nada mas que imprimir los mismos mensajes, asi no puede terminar, dame almenos una pista para seguir, porque no puedo responder desde mi servidor

0voto

Peter comentado

El problema es que no sabes ni lo que tiene que hacer el código, como hacerlo, ni porque hacerlo... Entonces si no tienes ni idea de ninguna de las partes mas importantes, ¿que caso tiene decirte otras?

1voto

carlossevi comentado

@steven he cambiado el título a tu pregunta para que se corresponda con el contenido de la misma, ya que en realidad el error no tenía nada que ver con sockets.

Si tienes más preguntas derivadas, ya sabes, puedes hacerlas.
Si la actual está resuelta, márcala como tal por favor.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta