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)
Другие вопросы по тегам