Python: SyntaxError: ключевое слово не может быть выражением

17

В Python script я вызываю функцию из 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
    Относительно вашего обновления: Многие синтаксические ошибки идут с символом ^ указывающим на токен, который вызвал ошибку разбора, другие (включая этот) не делают. В любом случае, обратите внимание на сообщение об ошибке, и гуглите сообщение об ошибке, если это необходимо. В этом случае первые попадания должны были прояснить ситуацию.
  • 13
    @SvenMarnach: поиск в сообщении об ошибке приведет вас на эту страницу.
Теги:
syntax
syntax-error
keyword

5 ответов

15
Лучший ответ

sum.up не является допустимым именем аргумента ключевого слова. Аргументы ключевого слова должны быть действительными идентификаторами. Вы должны посмотреть в документации библиотеки, которую используете, как этот аргумент действительно называется - возможно sum_up?

  • 1
    Да, так и было. Я забыл, что при работе с R-функциями все точки необходимо переводить в подчеркивание. Итак, sum_up сделал sum_up дело. :)
  • 0
    Просто была та же самая синтаксическая ошибка, потому что я использовал имя аргумента "my-arguments-name". Ваш ответ помог мне выяснить, что переименование его в "my_argument_name" может устранить ошибку.
6

Ошибка исходного парсера python на sum.up=False с именем аргумент, поскольку sum.up не является допустимым именем аргумента (вы не можете использовать точки - только буквенно-цифровые символы и символы подчеркивания в именах аргументов).

4

Я думаю, что многие из нас, которые пришли на эту страницу, столкнулись с проблемой Scikit Learn,, один из способов ее решения - создать словарь с параметрами и передать его модели:

params = {'C': 1e9, 'gamma': 1e-07}
cls = SVC(**params)    
  • 0
    Почему не cls = SVC(C=1e9, gamma=1e-07) ?
  • 0
    @MattS работает, но иногда вы сохраняете параметры в словаре, поэтому вам нужно его «распаковать».
0

Используя API-интерфейс DSL для поиска эластичности, вы можете получить ту же ошибку с помощью

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"}})
-1

У меня возникла эта проблема при преобразовании форматирования % в .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)
  • 0
    Не уверен, что вы ответили на вопрос OP, но вы ответили на мой вопрос о функции форматирования, требующей параметров, а не строк.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню