我需要检测文件句柄是使用二进制模式还是文本模式 - 这是为了能够编码/解码 str/bytes 所必需的。我怎样才能做到这一点?
使用二进制模式myfile.write(bytes)
时有效,而在文本模式下myfile.write(str)
有效。
这个想法是我需要知道这一点,以便能够在调用 myfile.write() 之前对参数进行编码/解码,否则它可能会因异常而失败。
我需要检测文件句柄是使用二进制模式还是文本模式 - 这是为了能够编码/解码 str/bytes 所必需的。我怎样才能做到这一点?
使用二进制模式myfile.write(bytes)
时有效,而在文本模式下myfile.write(str)
有效。
这个想法是我需要知道这一点,以便能够在调用 myfile.write() 之前对参数进行编码/解码,否则它可能会因异常而失败。
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() 内置函数创建的,这将是 mode 参数的值。这是一个只读属性,可能不会出现在所有类似文件的对象上。
如何以这种方式解决您的问题:
try:
f.write(msg)
except TypeError:
f.write(msg.encode("utf-8"))
即使您的句柄不提供.mode
.