Python 3 TypeError: ожидается строковый аргумент, получено 'bytes' casperjs_capture - PullRequest
0 голосов
/ 26 сентября 2018

Я получаю сообщение об ошибке при выполнении кода ниже с 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 ]

0 голосов
/ 26 сентября 2018

Я только что перешел с 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))
0 голосов
/ 26 сентября 2018

Файловый объект, возвращаемый NamedTemporaryFile(), по-видимому, находится в текстовом режиме, поэтому не следует кодировать template_content в байты перед записью в render_file.

Изменение:

render_file.write(template_content.encode('utf-8'))

до:

render_file.write(template_content)
...