Pregunta originalPython: ¿está bien devolver booleanos y cadenas?
He hecho una función que está esperando que una cadena en particular aparezca en un puerto serie, y devuelve todo el carácter leído hasta que se encuentre la cadena, o falso si no. Esto es bastante conveniente, pero me preguntaba si se considera una mala práctica o no.
Aclaración:
El objetivo principal es que esperar a una determinada cadena dea aparecer en una determinada cantidad de tiempo. Excepto por el error IO, el resultado posible es Verdadero (la cadena apareció) o Falso El objetivo secundario es obtener todo el resultado, porque puede haber información que me gustaría analizar antes de la respuesta real que se busca. Pensé que podría ser que podría combinar el objetivo primario y secundario en un valor de retorno.
def MyFunc(s, timeout) :
test = get_some_input(timeout)
if test.endswith(s)
return test
else
return False
Editar: Otra respuesta propuesta es hacer una excepción. No creo que sea una buena idea, porque el tiempo de espera es un comportamiento esperado. Quiero decir, si hay un parámetro para especificar un tiempo de espera, entonces un tiempo de espera es un posible resultado, y no una excepción.
Editar 2: Como necesito almacenar la entrada, tal vez usar una clase es la solución correcta. La función de espera tiene un valor de retorno claro, pero también se puede acceder a toda la cadena que se leyó hasta el tiempo de espera.
class Parser :
def __init__(self, sport_name):
self.currentMsg = ''
self.ser = serial.Serial(sport_name, 115200)
def WaitFor(self, s, timeOut=None):
self.ser.timeout = timeOut
self.currentMsg = ''
while self.currentMsg.endswith(s) != True :
# should add a try catch here
c=self.ser.read()
if c != '' :
self.currentMsg += c
else :
print 'timeout waiting for ' + s
return False
return True
Esa cosa ortogonal está perfectamente bien. Así que devolver una tupla sería una buena solución, sin embargo, todavía no me siento cómodo con esto, y el uso de una clase me permite incorporar un puerto serie y permite una mayor extensión. – shodanex
Entonces, ¿cuál debería ser el valor si está bien? ¿Falso? – SilentGhost
@SilentGhost: el valor siempre es una lectura de entrada hasta ahora (hasta que se encuentra la cadena o se produce un tiempo de espera). – jfs