2010-04-07 8 views
5

J'ai une simple question Python sur laquelle je me bloque le cerveau. Cet extrait de code fonctionne. Mais quand je Substitue "258 494-3929" avec phoneNumber, je reçois l'erreur suivante ci-dessous:L'entrée de la ligne de commande provoque 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> 

D'ailleurs, je l'ai import re et essayé d'utiliser rstrip en cas de \n

Quoi d'autre pourrais-je manquer?

+0

Le stockez-vous en tant que chaîne ou brut? –

Répondre

8

Vous devez utiliser raw_input au lieu de input, et vous ne devez pas appeler str, parce que cette fonction retourne une chaîne elle-même :

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

La fonction input() effectivement évalue l'entrée qui est tapé dedans:

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

Il essaie d'évaluer « 258 494-3929 » qui est Python non valide.

Utilisez sys.stdin.readline().strip() pour faire votre lecture.

5

Dans la version Python 2.x, entrée() fait deux choses:

  1. lit une chaîne de données. (Vous le voulez.)
  2. Ensuite, il évalue la chaîne de données comme s'il s'agissait d'une expression Python. (Cette partie est à l'origine de l'erreur.)

La fonction raw_input() est meilleure dans cette situation car elle fait # 1 ci-dessus mais pas # 2.

Si vous changez:

input("Please enter a phone number: ") 

à lire:

raw_input("Please enter a phone number: ") 

vous éliminerez l'erreur du numéro de téléphone ne pas être une expression Python valide.

La fonction input() a déclenché tant de personnes apprenant Python qu'à partir de Python versions 3.x, les concepteurs du langage ont supprimé l'étape d'évaluation supplémentaire. Cela fait que input() dans les versions 3.x se comporte comme raw_input() dans les versions 2.x.

Voir aussi a helpful wikibooks article.

+0

appeler 'str()' n'est pas nécessaire après avoir appelé 'raw_input()' (sauf s'il s'agissait d'une erreur cut-n-paste) :-) votre autre point est tout à fait valide: utilisez 'raw_input()' dans Python 2 et 'input()' dans Python 3 ...le nom a été changé mais la fonction reste la même. 'input()' dans Python 2 provoque des problèmes comme décrit par l'OP, d'où la raison pour laquelle il est/a été complètement supprimé du langage (en Python 3) – wescpy

+0

Il est vrai que l'appel de 'str()' est superflu, car a été mentionné dans certaines des autres réponses. Cependant, cela ne provoque pas l'erreur SyntaxError. – cheerful