2016-07-12 3 views
0

Мне нужно разобрать байтовую строку, которая содержит более одной строки в исходном коде. Как этоБайт-строка, охватывающая более одной строки

self.file.write(b'#compdef %s\n\n' 
        '_arguments -s -A "-*" \\\n' % (self.cmdName,)) 

эта линия бросает следующее исключение

builtins.SyntaxError: cannot mix bytes and nonbytes literals 

который может быть закреплен следующим образом

self.file.write(b'#compdef %s\n\n\'\'_arguments -s -A "-*" \\\n' % (self.cmdName,)) 

Обратите внимание на обратные косые после \n. но это исправление соответствует правилам проекта менее 79 символов в строке.

Как исправить это?

код прекрасно работает на Python 2, но не на Python 3.

ответ

4

Вы прекрасно использовать несколько строковых литералов, но они должны быть одного и того же типа . У вас не хватает префикс b на второй линии:

self.file.write(b'#compdef %s\n\n' 
       b'_arguments -s -A "-*" \\\n' % (self.cmdName,)) 

Только при использовании строковых литералов одного и того же типа будет питон анализатор объединить их в один больше bytes строки объекта.

Он работал на Python 2, потому что префикс b - это не-op; b'..' и '..' производят один и тот же тип объекта. Префикс b существует только в Python 2, чтобы было проще писать код для обоих Python 2 и 3 в той же кодовой базе (polyglot).

+0

Спасибо. Не понял мою ошибку там – abhi