[Python]エラー対処法(TypeError: a bytes-like object is required, not ‘str’)

スポンサーリンク

APIレスポンスやファイル内から取得したデータをreplaceメソッドなどで変換しようとしたときに発生したエラーだったと思います。

実装時に、あまり型チェックなどを意識しておらず、対象の変数がbytes型なのに、引数の文字列はstr型であるために発生したようです。
その時のエラー内容と対処方法を残しておきます。

エラー発生コードとエラーメッセージ

コード

test = test.replace('\'', '\'\'')

エラーメッセージ

TypeError: a bytes-like object is required, not 'str'

エラーの内容としては、「str」ではなく、バイトのようなオブジェクトが必要だよというような意味です。
bytes型のまま取り扱うのであれば、以下の対処方法を行えばよいはずです。

対処方法

str型ではなくbyte型にする。(単純な対処法は、bをつける)
例:どこかのAPIのurl

byte_test = b'https://api.~~~.go.jp/rest/2.0/app/getStatsData~~~'
test = test.replace(byte_test, b'~~~')

なお、文字列の置換とかは、strのままの方がよいことがあ多いので、decodeする方がわかりやすくなるかと思います。

例:

str_test = 'https://api.~~~.go.jp/rest/2.0/app/getStatsData~~~'
test = test.decode()
test = test.replace(str_test, '~~~')

str → bytesはencode
bytes → strはdecode

コメント

タイトルとURLをコピーしました