Python:语法错误:关键字不能是表达式。

47
在 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

这里到底出了什么问题?

2
关于你的更新:许多语法错误会带有一个插入符号 ^,指向引起解析错误的令牌,而其他错误(包括这个)则不会。无论如何,请注意错误信息,并在必要时谷歌该错误信息。在这种情况下,第一个搜索结果应该已经解决了问题。 - Sven Marnach
33
现在谷歌搜索这个错误信息会带你来到这个页面。 - Thanatos
5个回答

39

sum.up 不是一个有效的关键字参数名称。 关键字参数必须是有效的标识符。您应该查看您正在使用的库的文档,以了解这个参数实际上被称为什么 - 也许是 sum_up


3
没错,就是这样。我忘了处理 R 函数时,所有的点都需要翻译成下划线。所以 sum_up 起到了作用。 :) - Ricky Robinson
刚刚遇到了相同的语法错误,因为我使用了一个参数名“my-argument-name”。你的答案帮助我发现将其重命名为“my_argument_name”可以解决这个错误。 - flaudre

24

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

我想许多来到此页面的人都遇到了 Scikit Learn 的问题,解决方法之一是创建一个带有参数的字典,并将其传递给模型:

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

为什么不使用cls = SVC(C=1e9, gamma=1e-07)呢? - MattS
@MattS 这个代码是可行的,但有时候你会把参数存储在字典里,因此需要“解包”它。 - Vadim
使用kwargs来解决问题!我喜欢这种动态参数名称的技巧(: https://realpython.com/python-kwargs-and-args/) - CloudBalancing

8

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


7

使用Elasticsearch 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"}})

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)

1
不确定您是否回答了问题,但您回答了我的问题,即格式函数需要参数而非字符串。 - chishaku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接