命令行输入导致语法错误
我有这段代码:
# 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()这个函数做了两件事:
- 读取一串数据(这正是你想要的)。
- 然后把这串数据当成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: ")