Как убедиться, что filehandle.write () не перестал работать из-за проблем преобразования str / bytes? - PullRequest
1 голос
/ 31 августа 2010

Мне нужно определить, использует ли файловый дескриптор двоичный или текстовый режим - это необходимо для того, чтобы иметь возможность кодировать / декодировать str / байты.Как я могу это сделать?

Когда используется двоичный режим myfile.write(bytes) работает, а когда в текстовом режиме myfile.write(str) работает.

Идея в том, что мне нужно знать это, чтобы бытьвозможность закодировать / декодировать аргумент перед вызовом myfile.write (), в противном случае он может завершиться с ошибкой.

Ответы [ 2 ]

4 голосов
/ 31 августа 2010

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

1 голос
/ 01 сентября 2010

Как насчет решения вашей проблемы следующим образом:

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

Это будет работать, даже если ваша ручка не предоставит .mode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...