我需要检测文件句柄是否使用二进制模式或文本模式 - 为了能够对str/bytes进行编码/解码,这是必需的。我怎样才能做到这一点?如何确保filehandle.write()不会由于str/bytes转换问题而失败?
当使用二进制模式myfile.write(bytes)
工作,并在文本模式myfile.write(str)
工作时。
这个想法是,我需要知道这一点,以便能够在调用myfile.write()之前对参数进行编码/解码,否则可能会失败并出现异常。
我需要检测文件句柄是否使用二进制模式或文本模式 - 为了能够对str/bytes进行编码/解码,这是必需的。我怎样才能做到这一点?如何确保filehandle.write()不会由于str/bytes转换问题而失败?
当使用二进制模式myfile.write(bytes)
工作,并在文本模式myfile.write(str)
工作时。
这个想法是,我需要知道这一点,以便能够在调用myfile.write()之前对参数进行编码/解码,否则可能会失败并出现异常。
如何解决你的问题是这样的:
try:
f.write(msg)
except TypeError:
f.write(msg.encode("utf-8"))
这会工作,即使你把手不提供.mode
。
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
有了这个告诫:
file.mode
该文件的I/O模式。如果文件是使用open() 内置函数创建的,则这将是模式参数的 值。这是一个 只读属性,并且可能不是 存在于所有类文件对象上。
谢谢,杰里米,我投了你的答案,但选择了其他答案,因为它是我的问题的更好的解决方案(假设它更pythonic)。 – sorin 2010-09-01 10:00:48