跨越多行

时间:2016-07-12 10:30:07

标签: python python-3.x literals string-literals bytestring

我需要解析源代码中跨越多行的字节字符串。喜欢这个

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上运行失败。

1 个答案:

答案 0 :(得分:9)

您可以使用多个字符串文字,但它们必须具有相同的类型。您缺少第二行的b前缀:

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

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

它适用于Python 2,因为b前缀是无操作的; b'..''..'生成相同类型的对象。 {2}仅存在于Python 2中,以便在同一代码库(多语言)中为Python 2和3编写代码更容易。