【问题标题】:Byte string spanning more than one line跨越多行的字节串
【发布时间】:2016-11-14 13:02:03
【问题描述】:

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

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

【问题讨论】:

    标签: python python-3.x literals string-literals


    【解决方案1】:

    你可以使用多个字符串字面量,但它们必须是相同的类型。您在第二行缺少 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 编写代码。

    【讨论】:

      猜你喜欢
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 2012-12-15
      • 1970-01-01
      相关资源
      最近更新 更多