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