【问题标题】:How to assure that filehandle.write() does not fail due to str/bytes conversions issues?如何确保 filehandle.write() 不会因 str/bytes 转换问题而失败?
【发布时间】:2010-08-31 16:28:20
【问题描述】:

我需要检测文件句柄是使用二进制模式还是文本模式——这是对 str/bytes 进行编码/解码所必需的。我该怎么做?

使用二进制模式时myfile.write(bytes) 有效,而在文本模式下myfile.write(str) 有效。

这个想法是我需要知道这一点,以便能够在调用 myfile.write() 之前对参数进行编码/解码,否则它可能会因异常而失败。

【问题讨论】:

    标签: python file-io python-3.x filehandle


    【解决方案1】:

    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() 创建的 内置函数,这将是 模式参数的值。这是一个 只读属性,可能不是 出现在所有类似文件的对象上。

    【讨论】:

    • 谢谢,杰里米,我投票给你的答案,但选择了另一个答案,因为它是解决我的问题的更好方法(假设它更 Pythonic)。
    【解决方案2】:

    这样解决你的问题怎么样:

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

    即使您的句柄不提供.mode,这也可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      相关资源
      最近更新 更多