2010-08-31 65 views
1

我需要检测文件句柄是否使用二进制模式或文本模式 - 为了能够对str/bytes进行编码/解码,这是必需的。我怎样才能做到这一点?如何确保filehandle.write()不会由于str/bytes转换问题而失败?

当使用二进制模式myfile.write(bytes)工作,并在文本模式myfile.write(str)工作时。

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

回答

1

如何解决你的问题是这样的:

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

这会工作,即使你把手不提供.mode

4

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

+0

谢谢,杰里米,我投了你的答案,但选择了其他答案,因为它是我的问题的更好的解决方案(假设它更pythonic)。 – sorin 2010-09-01 10:00:48