我需要解析源代码中跨越多行的字节串。像这样
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 编写代码。
