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

1

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

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

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

Теги:
python-3.x
file-io
filehandle

2 ответа

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
    Спасибо, Джереми, я проголосовал за твой ответ, но выбрал другой ответ, потому что это лучшее решение для моей проблемы (скажем, оно более питоническое).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню