Мне нужно определить, использует ли дескриптор файла двоичный режим или текстовый режим - это необходимо для того, чтобы иметь возможность кодировать/декодировать 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
Режим ввода/вывода для файла. Если файл был создан с помощью функции open() встроенной функции, это будет значение параметра режима. Это атрибут "только для чтения" и может не быть присутствует на всех файловых объектах.