【问题标题】:Cannot find syntaxerror [closed]找不到语法错误[关闭]
【发布时间】:2013-05-27 05:49:48
【问题描述】:
msg = ('Here is your breakdown of your most used words: \n\n'
           'Word | Times Used'
           '\n:--:|:--:'
           '\n' + str(keys[0]).capitalize() + '|' + str(values[0])
           '\n*'* + str(keys[1]).capitalize() + '|' + str(values[1])
           '\n' + str(keys[2]).capitalize() + '|' + str(values[2])
           '\n' + str(keys[3]).capitalize() + '|' + str(values[3])
           '\n' + str(keys[4]).capitalize() + '|' + str(values[4])
           '\n' + str(keys[5]).capitalize() + '|' + str(values[5])
           '\n' + str(keys[6]).capitalize() + '|' + str(values[6])
           '\n' + str(keys[7]).capitalize() + '|' + str(values[7])
           '\n' + str(keys[8]).capitalize() + '|' + str(values[8])
           '\n' + str(keys[9]).capitalize() + '|' + str(values[9]))

我收到一个语法错误,其中被 * 包围的 ' 是。

【问题讨论】:

  • 错误信息是什么?
  • “你的程序有错误:无效的语法”
  • 那么什么是味精?一个长字符串,还是两个字符串的元组?看前两个三个字符串。您缺少逗号或加号。
  • 我在行尾忘记了加号!非常感谢。
  • @rajpy fourth 行实际上是第一个需要+ 的行。相邻的字符串文字被解析为单个字符串。

标签: python string syntax


【解决方案1】:

错的那一行是'\n*'* + str(keys[1]).capitalize() + '|' + str(values[1])

当然,在* 你得到+ 之后这是一个语法错误。

'\n*'* + str(keys[1]).capitalize() + '|' + str(values[1])

应该是(没有*

'\n*' + str(keys[1]).capitalize() + '|' + str(values[1])

【讨论】:

  • 不,*只是为了显示错误在哪里
  • 永远不要相信编译器对错误在哪里的想法。它只能告诉你在解析你的程序时在哪里弄糊涂了,而不是你实际上在哪里犯了错误。实际错误通常在此之前的某个地方。在这种情况下,您的字符串彼此相邻,没有 + 来连接它们,也没有 , 来使它们成为元组。如何解决这个问题取决于你想要什么。
  • @LeeDanielCrocker:这不需要 修复(尽管在这种情况下,如果以不同的方式完成它会更具可读性),这是 Python 从 C 中获取的一个功能 - - 这些字符串文字在编译时自动连接。例如'foo' 'bar' == 'foobar'。正如 lvc 指出的那样,问题是当字符串非文字紧挨着没有操作符的字符串文字时。
【解决方案2】:

与其发现这个错误,不如改写一下干净一点?

msg = """Here is your breakdown of your most used words:
         Word | Times Used
         :--:|:--:"""

for k,v in somedict:
    msg += "\n{}|{}".format(k.capitalize(),v)

print(msg)

【讨论】:

    【解决方案3】:

    这是 SyntaxError 几乎与编译器所说的完全相同的罕见情况之一:

    msg = ('Here is your breakdown of your most used words: \n\n'
               'Word | Times Used'
               '\n:--:|:--:'
               '\n' + str(keys[0]).capitalize() + '|' + str(values[0])
    

    到这里为止你都很好。如果你在这里关闭括号并删除其余的,这将解析。

    问题是,在这之后,你有另一个字符串文字:'\n' + ...。你可以有两个字符串 literals 彼此相邻没有问题(Python 将它们视为单个字符串),但在这个阶段 Python 看到:

    str(values([0])) '\n'
    

    这始终是语法错误。您需要在这些之间有一个运算符,很可能是+。彼此相邻的字符串 only 适用于文字。例如,您可以这样做:

    >>> 'fred' 'flintstone'
    'fredflintstone'
    

    但不是:

    >>> x = 'fred'
    >>> x 'flintstone'
      File "<stdin>", line 1
        x 'flintstone'
                     ^
    SyntaxError: invalid syntax
    

    【讨论】:

      【解决方案4】:

      在python中,每行需要用反斜杠(¥)转义,每个字符串都需要用+运算符连接。

      女巫就像跟随,

      str = "abc" ¥
            + "def" ¥
            + "ghi"
      

      【讨论】:

      • 错误,在这两个方面。您不需要像问题中那样明确加入由()(或[]{})包围的行; Python 将它们之间的任何内容解析为一长行。您也不需要显式连接字符串文字 - 接下来的两个彼此(仅由空格分隔)被解析为单个字符串。
      • 对不起,我对语法有误解。谢谢你的建议。
      猜你喜欢
      • 2014-08-27
      • 2010-10-25
      • 1970-01-01
      • 2016-10-12
      • 2021-09-14
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多