Skip to main content
 首页 » 编程设计

python之跨越一行以上的字节串

2025年05月04日10xing901022

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

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 编写代码。