命令行输入导致语法错误

14 投票
4 回答
35700 浏览
提问于 2025-04-15 21:18

我有这段代码:

# 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!"

当我试着在input提示框中输入电话号码时,出现了一个错误:

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

这是为什么呢?

4 个回答

4

input() 函数实际上是会 评估 输入的内容的:

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

它试图评估 '258 494-3929',但这在 Python 中是无效的。

可以使用 sys.stdin.readline().strip() 来读取输入。

10

在Python 2.x版本中,input()这个函数做了两件事:

  1. 读取一串数据(这正是你想要的)。
  2. 然后把这串数据当成Python表达式来计算(这部分导致了错误)。

在这种情况下,使用raw_input()函数更好,因为它只做第一件事,而不做第二件事。

如果你把:

input("Please enter a phone number: ")

改成:

raw_input("Please enter a phone number: ")

就可以消除电话号码不是有效Python表达式的错误。

input()函数让很多学习Python的人感到困惑,因此从Python 3.x版本开始,语言设计者去掉了这个额外的计算步骤。这样,3.x版本中的input()就和2.x版本中的raw_input()表现得一样了。

另见 一篇有用的维基书文章

20

你应该使用 raw_input 而不是 input,而且你不需要再调用 str,因为这个函数本身就会返回一个字符串:

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

撰写回答