2025 06 08

  • 16:04:04 # requests の Response の bool 変換値

    トークン期限切れの際に自動でトークンリフレッシュを行うようにするために以下のように requests レスポンスの存在チェックをしたが False が返ってきたため想定通りに動かなかった。

    try:
        return func(self, *args, **kwargs)
    except requests.exceptions.RequestException as e:
        if e.response and e.response.status_code == 401:
            # トークンリフレッシュ
            ...
        else:
            raise
    

    公式ドキュメントによると requests のレスポンスはステータスコードが 400 未満の時、つまりリクエストが成功したときに True が返るようになっているらしい。
    そのため上記のような場合は e.response is not None のようにして存在チェックをする必要がある。
    requests.models — Requests 2.32.3 documentation

r = requests.Response()

r.status_code = 200
print(bool(r)) # True

r.status_code = 400
print(bool(r)) # False