跨越一行以上的字节串

Byte string spanning more than one line

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

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

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

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

仅当使用相同类型的字符串文字时,python 解析器才会将它们合并为一个更长的 bytes 字符串对象。

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