【问题标题】:Command-line input causes SyntaxError命令行输入导致 SyntaxError
【发布时间】:2011-02-05 01:38:04
【问题描述】:

我有一个简单的 Python 问题,我一直在思考。此代码 sn-p 有效。但是当我用 phoneNumber 替换“258 494-3929”时,出现以下错误:

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

顺便说一句,我做了import re 并尝试在\n 的情况下使用rstrip

我还能错过什么?

【问题讨论】:

  • 您是将其存储为字符串还是原始数据?

标签: python input command-line python-2.x


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    另见a helpful wikibooks article

    【讨论】:

    • 在调用raw_input() 之后不需要调用str() (除非这是一个剪切粘贴错误):-) 你的另一点非常有效:在Python 2 中使用raw_input()input() 在 Python 3 中...名称已更改,但功能保持不变。 Python 2 中的 input() 会导致 OP 所描述的问题,因此它被/已从语言中完全删除的原因(在 Python 3 中)
    • 确实,str() 调用是多余的,正如其他一些答案中提到的那样。但是,它不会导致 SyntaxError。
    【解决方案3】:

    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

    【讨论】:

      【解决方案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() 阅读。

      【讨论】:

        猜你喜欢
        • 2019-05-05
        • 2019-04-14
        • 2017-06-15
        • 2013-10-13
        • 1970-01-01
        • 1970-01-01
        • 2018-07-03
        • 2012-07-04
        • 1970-01-01
        相关资源
        最近更新 更多