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”‘
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:
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:
Esto asegurará que solo se conviertan a entero valores enteros válidos.