【问题标题】:Python: SyntaxError: keyword can't be an expressionPython:语法错误:关键字不能是表达式
【发布时间】:2012-07-22 22:07:35
【问题描述】:

在 Python 脚本中,我从 rpy2 调用了一个函数,但出现了这个错误:

#using an R module 
res = DirichletReg.ddirichlet(np.asarray(my_values),alphas,
                              log=False, sum.up=False) 
SyntaxError: keyword can't be an expression

这里到底出了什么问题?

【问题讨论】:

  • 关于您的更新:许多语法错误都带有插入符号 ^ 指向导致解析错误的标记,其他(包括这个)没有。无论如何,请注意错误消息,必要时google the error messgae。在这种情况下,第一次点击应该可以解决问题。
  • @SvenMarnach:现在谷歌搜索错误消息会将您带到此页面。

标签: python syntax syntax-error keyword


【解决方案1】:

sum.up 不是有效的关键字参数名称。关键字参数必须是有效的标识符。您应该查看您正在使用的库的文档真正是如何调用这个参数的——也许是sum_up?

【讨论】:

  • 是的,就是这样。我忘记了在处理 R 函数时,所有的点都需要翻译成下划线。所以sum_up 成功了。 :)
  • 刚刚出现相同的语法错误,因为我使用了参数名称“my-argument-name”。您的回答帮助我发现将其重命名为“my_argument_name”可以解决错误。
【解决方案2】:

sum.up=False 命名参数上的 python 源解析器失败,因为 sum.up 不是有效的参数名称(您不能在参数名称中使用点——只能使用字母数字和下划线)。

【讨论】:

    【解决方案3】:

    我刚从% 格式转换为.format() 时遇到了这个问题。

    之前的代码:

    "SET !TIMEOUT_STEP %{USER_TIMEOUT_STEP}d" % {'USER_TIMEOUT_STEP' = 3}
    

    有问题的语法:

    "SET !TIMEOUT_STEP {USER_TIMEOUT_STEP}".format('USER_TIMEOUT_STEP' = 3)
    

    问题是format是一个需要参数的函数。它们不能是字符串。 这是我见过的最糟糕的 python 错误消息之一。

    更正的代码:

    "SET !TIMEOUT_STEP {USER_TIMEOUT_STEP}".format(USER_TIMEOUT_STEP = 3)
    

    【讨论】:

    • 不确定您是否回答了 OP 的问题,但您回答了我关于格式函数需要参数而不是字符串的问题。
    【解决方案4】:

    我猜我们很多来到这个页面的人都对 Scikit Learn 有疑问,解决它的一种方法是创建一个带参数的字典并将其传递给模型:

    params = {'C': 1e9, 'gamma': 1e-07}
    cls = SVC(**params)    
    

    【讨论】:

    • 为什么不cls = SVC(C=1e9, gamma=1e-07)
    • @MattS 它可以工作,但有时您将参数存储在字典中,因此,您需要“解包”它。
    • 使用 kwargs 进行救援!我喜欢这种用于动态参数名称的技术(:realpython.com/python-kwargs-and-args
    【解决方案5】:

    使用 Elastic search DSL API,您可能会遇到同样的错误

    s = Search(using=client, index="my-index") \
        .query("match", category.keyword="Musician")
    

    您可以通过以下方式解决:

    s = Search(using=client, index="my-index") \
        .query({"match": {"category.keyword":"Musician/Band"}})
    

    【讨论】:

      猜你喜欢
      • 2020-02-10
      • 2016-09-26
      • 1970-01-01
      • 2013-06-04
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 2020-02-18
      相关资源
      最近更新 更多