2012-07-24 10 views
17

En una secuencia de comandos de Python que llamo una función de rpy2, pero me sale este error:Python: SyntaxError: la palabra clave no puede ser una expresión

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

Qué fue exactamente mal aquí?

+2

En cuanto a su actualización: Muchos errores de sintaxis vienen con un acento circunflejo '^' señalando el símbolo que causó el error de análisis, otros (incluido éste) no lo hacen. En cualquier caso, preste atención al mensaje de error y [google the error messgae] (http://www.google.com/search?q=Python+ "palabra clave + no puede + ser + una + expresión") si es necesario . En este caso, los primeros golpes deberían haber aclarado las cosas. –

+11

@SvenMarnach: buscar en Google el mensaje de error te lleva a esta página ahora. – Thanatos

Respuesta

15

sum.up no es un nombre de argumento de palabra clave válido. Los argumentos de palabra clave deben ser identificadores válidos. Debería ver en la documentación de la biblioteca que está utilizando cómo se llama este argumento realmente - tal vez sum_up?

+0

Sí, eso fue todo. Olvidé que cuando se trata de funciones R, todos los puntos deben traducirse a guiones bajos. Entonces 'sum_up' hizo el truco. :) –

+0

Acabo de tener el mismo error de sintaxis porque estaba usando un nombre de argumento "mi-argumento-nombre". Su respuesta me ayudó a descubrir que cambiarle el nombre a "mi_argumento_nombre" puede resolver el error. – Flaudre

6

Error de analizador fuente de Python en sum.up=False argumento con nombre como sum.up no es un nombre de argumento válido (no se pueden usar puntos, solo caracteres alfanuméricos y guiones bajos en los nombres de argumento).

-1

Acabo de recibir ese problema al convertir de formato % a .format().

código anterior:

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

sintaxis Problemática:

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

El problema es que format es una función que necesita parámetros. No pueden ser cuerdas. Ese es uno de los peores mensajes de error de Python que he visto en mi vida.

código corregido:

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

No estoy seguro si respondió la pregunta de OP, pero respondió la pregunta que tenía sobre la función de formato que necesita parámetros, no cadenas. – chishaku

4

supongo que muchos de nosotros que llegó a esta página tienen un problema con Scikit Aprender, una manera de resolverlo es crear un diccionario con los parámetros y pasarlo a la modelo:

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

Utilizando el API de búsqueda elástico ADSL, se puede golpear el mismo error con

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

se puede resolver haciendo:

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