我需要解析源代码中跨越多行的字节字符串。喜欢这个
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上运行失败。
答案 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编写代码更容易。