2010-08-31 3 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

Режим ввода/вывода для файла. Если файл был создан с использованием встроенной функции open() , это будет значение параметра режима. Это атрибут , доступный только для чтения, и не может быть присутствует на всех файловых объектах.

+0

Спасибо, Джереми, я проголосовал за ваш ответ, но выбрал другой ответ, потому что это лучшее решение для моей проблемы (скажем, это более питоновское). – sorin