組み込み開発のためのPython · レッスン 197 / 220

for・whileと繰り返しの停止条件

有限回の処理とタイムアウト付き待機を区別して、止まらないループを防ぎます。

装置の応答を待つ処理では、条件が成立しないと無限に待ち続ける危険があります。繰り返し回数か時間制限を設け、終了理由を記録できるようにします。

既知の件数にはforを使う

固定回数の測定やリストの走査には`for`を使います。`range(n)`は0から始まるため、ループ回数と表示上の番号を混同しないよう注意してください。ループ内で値を更新する場合は、最初の値・更新式・終了条件を一組として確認します。

待機にはタイムアウトを用意する

`while`は条件が変化しなければ処理が続きます。通信状態の待機では、単調増加する時計で期限を計算し、期限が来たら明確なタイムアウトとして終了します。単純な固定スリープは処理を遅らせるだけで、応答が来たかどうかの判定にはなりません。

コード例

手元のPython環境に貼り付ける前に、使用しているPythonの版と対象ライブラリの対応を確認してください。

import time

deadline = time.monotonic() + 2.0
while not response_ready():
    if time.monotonic() >= deadline:
        raise TimeoutError("応答待ちが時間切れになりました")
    time.sleep(0.01)

手を動かす課題

ポーリングの最大時間と確認間隔を設定し、期限切れと成功の両方を試験できるダミー関数を作ってください。

参考資料

「3. 繰り返しとデータのまとまり」の章一覧へ