Я часто использую print()
вместо file.write()
при записи в файлы на Python. Недавно мне пришлось выписать некоторые двоичные данные и попробовать подобный шаблон:
f = open('test.txt', 'w')
f.write('abcd')
print('efgh', file=f)
f.close()
f = open('test.bin', 'wb')
f.write(b'abcd') # works as expected
print(b'efgh', file=f)
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# TypeError: a bytes-like object is required, not 'str'
f.close()
Моей первой мыслью было добавление по умолчанию символа новой строки print()
, возможно, ошибка:
print(b'efgh', file=f, end='')
# same error
print(b'efgh', file=f, end=None)
# same error
print(b'efgh', file=f, end=b'')
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# TypeError: end must be None or a string, not bytes
print(b'efgh', file=f, end=b'\n')
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# TypeError: end must be None or a string, not bytes
К сожалению, ни одна из комбинаций изменения конца не сработала.
Почему это происходит? Я подозреваю, что это использование print()
может не поддерживаться, но в этом случае сообщение об ошибке весьма запутанно.