1

ファイルハンドルがバイナリ モードまたはテキスト モードを使用しているかどうかを検出する必要があります。これは、str/bytes をエンコード/デコードできるようにするために必要です。どうやってやるの?

バイナリ モードを使用するmyfile.write(bytes)と機能し、テキスト モードを使用すると機能しますmyfile.write(str)

myfile.write() を呼び出す前に引数をエンコード/デコードできるようにするために、これを知る必要があるという考えです。そうしないと、例外で失敗する可能性があります。

4

2 に答える 2

4

http://docs.python.org/library/stdtypes.html#file.mode

>>> f = open("blah.txt", "wb")
>>> f
<open file 'blah.txt', mode 'wb' at 0x0000000001E44E00>
>>> f.mode
'wb'
>>> "b" in f.mode
True

この注意事項:

ファイルモード

ファイルの I/O モード。ファイルが open() 組み込み関数を使用して作成された場合、これはモード パラメータの値になります。これは読み取り専用の属性であり、すべてのファイルのようなオブジェクトに存在するとは限りません。

于 2010-08-31T16:35:58.887 に答える
1

この方法で問題を解決してみませんか。

try:
    f.write(msg)
except TypeError:
    f.write(msg.encode("utf-8"))

これは、ハンドルが を提供しない場合でも機能します.mode

于 2010-09-01T09:34:33.437 に答える