2010-04-07 13 views
5

Mam proste pytanie Pythona, w którym mam zamrażanie mózgu. Ten fragment kodu działa. Ale kiedy podstawniki, "258 494-3929" z PhoneNumber, otrzymuję następujący błąd poniżej:Wprowadzanie danych z wiersza polecenia powoduje, że 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> 

nawiasem mówiąc, zrobiłem import re i spróbował wykorzystać rstrip w przypadku \n

Czego jeszcze mi brakowało?

+0

Czy przechowujesz go jako ciąg lub surowiec? –

Odpowiedz

8

Należy używać raw_input zamiast input, i nie trzeba zadzwonić str, ponieważ funkcja ta zwraca sam ciąg :

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

Funkcja wejścia() faktycznie ocenia wejście, które jest wpisane do niego:

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

on próbuje oceniać „258 494-3929”, który jest nieprawidłowy Python.

Użyj sys.stdin.readline().strip(), aby przeczytać.

5

w Pythonie 2.x, input() robi dwie rzeczy:

  1. odczytuje ciąg danych. (Chcesz tego.)
  2. Następnie ocenia łańcuch danych tak, jakby był wyrażeniem w języku Python. (Ta część powoduje błąd.)

Funkcja raw_input() jest lepsza w tej sytuacji, ponieważ ma wartość # 1 powyżej, ale nie # 2.

przypadku zmiany:

input("Please enter a phone number: ") 

czytać:

raw_input("Please enter a phone number: ") 

będziesz wyeliminować błąd numer telefonu nie jest poprawnym wyrażeniem Pythona.

Funkcja input() zadziałała, tak wiele osób uczy się Pythona, że ​​począwszy od wersji 3.x Pythona, projektanci języka usunęli dodatkowy etap oceny. To sprawia, że ​​input() w wersji 3.x zachowuje się tak samo jak raw_input() w wersjach 2.x.

Zobacz także a helpful wikibooks article.

+0

Wywołanie 'str()' nie jest konieczne po wywołaniu 'raw_input()' (chyba że był to błąd cut-n-paste) :-) twój drugi punkt jest całkiem poprawny: użyj 'raw_input()' w Pythonie 2 i 'input()' w Pythonie 3 ...nazwa została zmieniona, ale funkcja pozostała taka sama. 'input()' w Pythonie 2 powoduje problemy opisane przez OP, stąd powód, dla którego został całkowicie usunięty z języka (w Pythonie 3) – wescpy

+0

To prawda, że ​​wywołanie 'str()' jest zbędne, ponieważ zostało wspomniane w niektórych innych odpowiedziach. Jednak nie powoduje to błędu SyntaxError. – cheerful

Powiązane problemy