La entrada de la línea de comandos hace que SyntaxError

Tengo una pregunta simple de Python que me está congelando el cerebro. Este fragmento de código funciona. Pero cuando sustituyo “258 494-3929” por número de teléfono, obtengo el siguiente error a continuación:

# Compare phone number phone_pattern = '^\d{3} ?\d{3}-\d{4}$' # phoneNumber = str(input("Please enter a phone number: ")) if re.search(phone_pattern, "258 494-3929"): print "Pattern matches" else: print "Pattern doesn't match!" 

  Pattern does not match Please enter a phone number: 258 494-3929 Traceback (most recent call last): File "pattern_match.py", line 16, in  phoneNumber = str(input("Please enter a phone number: ")) File "", line 1 258 494-3929 ^ SyntaxError: invalid syntax C:\Users\Developer\Documents\PythonDemo> 

Por cierto, rstrip import re y traté de usar rstrip en caso de que \n

¿Qué más podría faltar?

Debería usar raw_input lugar de input , y no tiene que llamar a str , porque esta función devuelve una cadena en sí:

 phoneNumber = raw_input("Please enter a phone number: ") 

En la versión 2.x de Python, input () hace dos cosas:

  1. Lee una cadena de datos. (Tu quieres esto.)
  2. Luego evalúa la cadena de datos como si fuera una expresión de Python. (Esta parte está causando el error.)

La función raw_input () es mejor en esta situación porque lo hace # 1 arriba pero no # 2.

Si cambias:

 input("Please enter a phone number: ") 

leer:

 raw_input("Please enter a phone number: ") 

eliminará el error de que el número de teléfono no sea una expresión de Python válida.

La función input () ha disparado a tanta gente que está aprendiendo Python que a partir de las versiones 3.x de Python, los diseñadores del lenguaje eliminaron el paso de evaluación adicional. Esto hace que input () en las versiones 3.x se comporte igual que raw_input () en las versiones 2.x.

Vea también un artículo útil de wikibooks .

La función input () en realidad evalúa la entrada que se escribe en ella:

 >>> print str(input("input: ")) input: 258238 258238 >>> print str(input("input: ")) input: 3**3 + 4 31 

Se trata de evaluar ‘258 494-3929’, que no es válido para Python.

Use sys.stdin.readline().strip() para hacer su lectura.

input() llama a eval(raw_input(prompt)) , por lo que desea phoneNumber = raw_input("Please enter a phone number: ").strip()

Consulte también http://docs.python.org/library/functions.html#input y http://docs.python.org/library/functions.html#raw_input