es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El suscriptor recibe una cadena con ‘Datos: “”‘.

Tengo un publicador que envía un número del 0 al 6, o None. Así que lo convierto en una cadena antes de enviarlo para asegurarme de que pueda enviar el valor “None”.

self.pub = rospy.Publisher("jugada", String, queue_size=1)
self.pub.publish(str(col))

y luego quiero que el suscriptor lo reciba:

    class clicker(object):
        def <strong>init</strong>(self):
            self.jugada_sub = rospy.Subscriber("jugada",String, self.callback)
    def callback(self, data): 
        jugada = data
        print(jugada)

en lugar de imprimir:
3
en lugar de esto imprime
Data: “3”
lo cual rompe el resto del código que necesito para. Intenté convertir a string (str(data)) y luego intenté editar la cadena para eliminar la parte ‘Data:’, pero eso no funciona. Traté de buscar en Google durante una hora, pero no puedo descubrir cómo deshacerme de “Data:” ni cómo cambiar el tipo de mensaje para enviar solo la cadena.

PD Más tarde en el código hago:

if jugada != "None":
jugada = int(jugada)

y obtengo el error: int() el argumento debe ser una cadena.

y si hago jugada = str(data) al principio, obtengo el error: Literal no válido para int() con base 10: ‘data: “3”‘

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para eliminar la parte “Data:” y recibir solo la cadena, se necesita acceder a los datos utilizando el atributo data.data. Entonces, el método de devolución de llamada debe modificarse de la siguiente manera:

    class clicker(object):
        def __init__(self):
            self.jugada_sub = rospy.Subscriber("jugada", String, self.callback)
    
        def callback(self, data):
            jugada = data.data
            print(jugada)
    

    Esto imprimirá solo el valor recibido por el editor, sin la parte “Data:”.

    En cuanto al error de conversión int (), cuando el editor envía None, se recibe como la cadena “None”, que no se puede convertir en un entero. Para solucionar esto, puedes usar una declaración if para verificar si la cadena es “None” antes de convertirla en un entero:

    if jugada != "None":
        jugada = int(jugada)
    

    Esto asegurará que solo se conviertan a entero valores enteros válidos.

Comments are closed.