1

给定six.text_type功能。为 unicode 文本编写 i/o 代码很容易,例如https://github.com/nltk/nltk/blob/develop/nltk/parse/malt.py#L188

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 回答