オリジナル質問Python:ブール値と文字列の両方を返しても問題ありませんか?
シリアルポートに特定の文字列が表示されるのを待っていて、文字列が見つかるまですべての文字を返します。そうでない場合はfalseを返します。これは非常に便利ですが、それが悪い練習とみなされるかどうかは疑問でしたか?
明確化:
第一の目標は、一定時間内に表示されるように特定文字列を待つことです。 IOエラーを除いて、可能な結果はTrue(文字列が表示された)またはFalseです。 2番目の目標は、実際の回答が検索される前に解析したい情報がある可能性があるためです。プライマリとセカンダリの目標を1つの戻り値で組み合わせることができると私は考えました。
def MyFunc(s, timeout) :
test = get_some_input(timeout)
if test.endswith(s)
return test
else
return False
編集:もう一つの提案された答えは、例外を発生させることです。私はそれが良い考えだとは思わない。なぜならタイムアウトは期待された動作だからだ。つまり、タイムアウトを指定するパラメータがある場合、タイムアウトが可能な結果であり、例外ではありません。
編集2: 入力を保存する必要があるので、おそらくクラスを使用するのが適切な解決策です。関数の待機は明確な戻り値を持ちますが、タイムアウトまで読み込まれた文字列全体にもアクセスできます。
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
それは直角のものが完全に正しいです。だからタプルを返すことは良い解決策になるでしょうが、私はこれにはまだとても慣れていないし、クラスを使ってシリアルポートを埋め込むことができ、さらに拡張することができます。 – shodanex
だから、もしokayがFalseならば、値はどうあるべきですか? – SilentGhost
@SilentGhost:値は、これまでの入力読み取り値です(文字列が見つかるか、タイムアウトが発生するまで)。 – jfs