1. ホーム
  2. python

[解決済み] TypeError: write() の引数は bytes ではなく str でなければならない (Python 3 vs Python 2 )

2022-02-01 10:27:58

質問

以下のコードは、python 2.7.13 で完全に動作します。

import os
with open('random.bin','w') as f:
    f.write(os.urandom(10))

しかし、Python 3ではエラーを投げる 3.6.0 |Anaconda 4.3.0 (64bit)| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64 bit (AMD64)] の場合です。

<ブロッククオート

トレースバック(最も最近の呼び出し)。 ファイル "C:/Users/hsingh/PycharmProjects/Item3.py", line 3, in f.write(os.urandom(10)) TypeError: write() の引数はbyteではなくstrでなければなりません。

動作が異なる理由や修正方法があれば教えてください。

解決方法は?

Python 3では、ファイルをバイナリモードで開くかテキストモードで開くかの違いがあります。ただ b のフラグを立てるとバイナリになります。

with open('random.bin','wb') as f:

これはPython 2でも動作します。