2010-04-07 34 views
5

Tengo una simple pregunta de Python en la que me estoy congelando el cerebro. Este fragmento de código funciona. Pero cuando substitué "258 494-3.929" con phoneNumber, llego a continuación el siguiente error:La entrada de la línea de comandos causa SyntaxError

# 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 <module> 
     phoneNumber = str(input("Please enter a phone number: ")) 
    File "<string>", line 1 
     258 494-3929 
     ^
    SyntaxError: invalid syntax 

    C:\Users\Developer\Documents\PythonDemo> 

Por cierto, lo hice y import rerstrip intentado utilizar en el caso de la \n

¿Qué más podría extrañar?

+0

¿Lo está almacenando como hilo o sin procesar? –

Respuesta

8

que puedes usar en lugar de raw_inputinput, y usted no tiene que llamar str, ya que esta función devuelve una cadena propia :

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

La función de entrada() en realidad evalúa la entrada que está escrito en él:

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

Se trata de evaluar '258 494-3929', que es Python válido.

Use sys.stdin.readline().strip() para leer.

5

En Python 2.x, de entrada() hace dos cosas:

  1. lee una cadena de datos. (Desea 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 hace # 1 arriba pero no # 2.

Si cambia:

input("Please enter a phone number: ") 

para que diga:

raw_input("Please enter a phone number: ") 

se eliminará el error del número de teléfono no es una expresión válida en Python.

La función de entrada() ha provocado que muchas personas aprendieran Python que, comenzando con Python versiones 3.x, 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.

Véase también a helpful wikibooks article.

+0

llamada 'str()' no es necesario después de llamar a 'raw_input()' (a menos que sea un error de cortar y pegar) :-) su otro punto es bastante válido: use 'raw_input()' en Python 2 y 'input()' en Python 3 ...el nombre fue cambiado pero la función sigue siendo la misma. 'input()' en Python 2 causa problemas como los describe el OP, de ahí la razón por la que se está eliminando del idioma (en Python 3) – wescpy

+0

Es cierto que la llamada 'str()' es superflua, ya que fue mencionado en algunas de las otras respuestas. Sin embargo, no está causando el SyntaxError. – cheerful

Cuestiones relacionadas