Python 3 TypeError: ожидается строковый аргумент, получено 'bytes' casperjs_capture
Я получаю сообщение об ошибке при выполнении кода ниже с Python 3, но на Python 2 он работает нормально
template_content = <HTML data>
with NamedTemporaryFile(suffix='.html') as render_file:
render_file.write(template_content.encode('utf-8'))
render_file.seek(0)
stream = StringIO()
casperjs_capture(stream, url='file://%s' % os.path.abspath(render_file.name))
Ошибка:
*** TypeError: string argument expected, got 'bytes'
2 ответа
Я только что перешел с StringIO на BytesIO и его работа для меня. Чтобы найти решение, это займет почти день
template_content = <HTML data>
with NamedTemporaryFile(suffix='.html') as render_file:
render_file.write(template_content.encode('utf-8'))
render_file.seek(0)
stream = BytesIO()
casperjs_capture(stream, url='file://%s' % os.path.abspath(render_file.name))
Файловый объект, возвращаемый NamedTemporaryFile()
по-видимому, в текстовом режиме, поэтому вы не должны кодировать template_content
в байтах, прежде чем писать render_file
,
Изменить:
render_file.write(template_content.encode('utf-8'))
чтобы:
render_file.write(template_content)