字节字符串跨越多行

abh*_*bhi 1 python literals string-literals bytestring python-3.x

我需要解析源代码中跨越多行的字节字符串.像这样

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

此行抛出以下异常

builtins.SyntaxError: cannot mix bytes and nonbytes literals
Run Code Online (Sandbox Code Playgroud)

可以通过以下方式修复

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

注意后面的反斜杠\n.但是此修复程序遵循每行少于79个字符的项目规则.

我该如何解决?

代码在Python 2上工作正常,但在Python 3上失败.

Mar*_*ers 9

您可以使用多个字符串文字,但它们必须属于同一类型.您缺少b第二行的前缀:

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

只有在使用相同类型的字符串文字时,python解析器才会将这些文件合并为一个更长的bytes字符串对象.

它适用于Python 2,因为b前缀是无操作; b'..''..'生成相同类型的对象.该b前缀只有在Python 2的存在是为了更容易地编写代码既Python 2和3的相同的代码(多语种).