命令行输入导致SyntaxError

问题描述 投票:0回答:4

我有这个代码:

# 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

为什么会出现这种情况?


这个问题是关于在尝试处理用户输入时出现的特定于 Python 2.x 的特定错误。通常,这来自于实施要求用户输入直到他们给出有效响应的失败尝试。

python input command-line python-2.x
4个回答
20
投票

您应该使用

raw_input
而不是
input
,并且不必调用
str
,因为这个函数本身返回一个字符串:

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

10
投票

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

  1. 读取一串数据。 (你想要这个。)
  2. 然后它会像 Python 表达式一样计算数据字符串。 (这部分导致了错误。)

在这种情况下,函数 raw_input() 更好,因为它执行上面的#1,但不执行#2。

如果你改变:

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() 相同。

另请参阅有用的维基书籍文章


4
投票

input()函数实际上评估输入的输入:

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

它正在尝试评估无效的Python“258 494-3929”。

使用

sys.stdin.readline().strip()
进行阅读。


2
投票

input()
打电话给
eval(raw_input(prompt))
,所以你想要
phoneNumber = raw_input("Please enter a phone number: ").strip()

另请参阅 http://docs.python.org/library/functions.html#inputhttp://docs.python.org/library/functions.html#raw_input

© www.soinside.com 2019 - 2024. All rights reserved.