1

機能を考えるとsix.text_type。Unicode テキストの I/O コードを書くのは簡単です

fout.write(text_type(line))

しかし、モジュールがないと、次のような体操sixが必要になります。try-except

try:
    fout.write(text_type(line))
except:
    try:
        fout.write(unicode(line))
    except:
        fout.write(bytes(line))

Unicode 行を書き込んで、python スクリプトが py2.x と py3.x と互換性があることを確認するファイルを解決する pythonic の方法は何ですか?

上記はtry-except、py2to3 互換性を処理するための pythonic の方法ですか? 他にどのような選択肢がありますか?


この質問の詳細/コンテキスト: https://github.com/nltk/nltk/issues/1080#issuecomment-134542174

4

1 に答える 1

2

行うことsixを行い、自分自身を定義しtext_typeます。

try:
    # Python 2
    text_type = unicode
except NameError:
    # Python 3
    text_type = str

いずれにせよ、ここで空白行を使用しないexceptでください。異なる Python バージョンの使用とはまったく関係のない他の問題を隠すことになります。

ただし、どのような種類のファイル オブジェクトに書き込みを行っているかは明確ではありません。ファイルを開くために を使用している場合io.open()、Python 2 と 3 の両方で常に Unicode テキストを予期するファイル オブジェクトを取得するため、テキストを に変換する必要はありませんbytes

于 2015-08-25T10:25:17.430 に答える