【问题标题】:Python code with Input() given syntax error in Sublime REPL, but works with Python Shell带有 Input() 的 Python 代码在 Sublime REPL 中给出了语法错误,但适用于 Python Shell
【发布时间】:2018-02-24 03:29:02
【问题描述】:

我在 python 3 中输入了一段代码,python shell 运行得非常好,并给出了正确的输出。我将此代码转移到 Sublime Text 3,下载了 sublime REPL 包,并用它来运行我的代码。但是,当我运行它并使用 REPL 在 Sublime 中输入输入时,它告诉我存在语法错误。这是它发现语法错误的行:

dataGiven = sorted([float(x) for x in input("Enter data separated by a space (At least 3 values of data must be entered) ").split()])

但是,没有语法错误,因为 python shell 可以正确运行代码。请帮忙。我发现 Sublime 文本非常有用,但由于此输入,它无法正常运行。如果您需要,我愿意发布更大的代码段。提前致谢。

编辑

错误截图:

Traceback (most recent call last):
  File "Untitled.py", line 708, in <module>
    dataGiven = sorted([float(x) for x in input("Enter data separated by a space (At least 3 values of data must be entered) ").split()])
  File "<string>", line 1
    78 67 45
        ^
SyntaxError: invalid syntax

***Repl Closed***

【问题讨论】:

  • 所以它允许你输入一个输入然后它抛出语法错误?更多错误代码/屏幕截图可能会有所帮助
  • 当然。我会去做的。可能有点难以理解。可以吗?
  • @Jonathan Porter 等等...错误仅在该行中。如果仅在 sublime text 的 REPL 中运行该特定行,它就会产生语法错误。我现在已经在我的问题中发布了错误的屏幕截图。请看一下。

标签: python python-3.x sublimetext3 sublimetext


【解决方案1】:

听起来 Sublime 正在使用 Python 2 解释器运行它。 input 尝试 eval 在 Python 2 中输入的字符串,这是在运行时获取 SyntaxError 的唯一方法(因为大多数任意用户输入的字符串在语法上不是合法的 Python 代码)。尝试将您的代码更改为:

import sys
print(sys.version_info)

它会告诉你它正在运行的实际版本。如果它是 Python 2,并且您需要它像在 Python 3 上一样在 Python 2 上运行,请切换到 raw_input 函数,或者屏蔽版本差异,添加:

if sys.version_info < (3,):
    input = raw_input

到文件的顶部,在 Python 2 上将 input 替换为 raw_input,因此它的行为与在 Python 3 上的行为相同。

【讨论】:

  • 我做到了。版本是 2.7,但是当我使用您提供的条件语句时,代码仍然会导致语法错误。我还能做什么?
  • @BOi:如果你把它放在文件的顶层,靠近文件顶部(在使用input 函数之前),它不会导致任何错误。你错过了什么。
  • 我很抱歉,但这正是我所做的。我把 i 放在文件的顶部。但是,它仍然会产生错误。我不知道为什么。
  • 我在答案中添加的行之前还有一个 input() 。它执行没有任何错误。
  • @BOi:您为第一个输入了合法的 Python 代码,仅此而已。您的屏幕截图中的错误正是您对 Py2 input 的期望。它尝试将eval 字符串"902 92 29" 视为Python 表达式,当它看到92902 分开时发生错误,并且两者之间没有运算符。您需要在问题中发布minimal reproducible example,以显示您所拥有的。如果您在使用input 的相同(或外部)范围内将input 重新定义为raw_input,在调用它之前,这个问题不会发生,我不能从心理上直觉你做错了什么。
猜你喜欢
  • 2015-12-19
  • 2021-02-21
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
相关资源
最近更新 更多