Python Interactive Interpreter始终在Windows上返回“无效语法”

时间:2010-12-31 11:37:43

标签: python windows

我遇到了一个非常令人困惑的问题。无论我在Python解释器中输入什么,都会返回“无效语法”。见下面的例子。我试过在我运行解释器的提示的代码页上搞错了,但它似乎没有任何帮助。

此外,我无法在网上其他地方找到这个特别奇怪的错误。

任何人都可以提供的任何帮助都很可爱。我已经尝试过重新安装Python,但我没有运气 - 3.13和2.7中也存在问题。

运行: Python 3.1.3版, Windows XP SP3。

获得:

C:\Program Files\Python31>.\python
Python 3.1.3 (r313:86834, Nov 27 2010, 18:30:53) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.  
>>> 2+2
  File "<stdin>", line 1  
    2+2
       ^     
SyntaxError: invalid syntax

>>> x = "Oh, fiddlesticks."  
  File "<stdin>", line 1  
    x = "Oh, fiddlesticks."  
                           ^  
SyntaxError: invalid syntax

5 个答案:

答案 0 :(得分:6)

在交互式和无缓冲地运行Python时存在一个已知问题,计划在3.2中修复 - 并且可能会向后移植到旧版本,请参阅http://bugs.python.org/issue11098

令人讨厌的是,有人可能在没有意识到的情况下使用无缓冲的I / O.在我的情况下(Python 2.5.4(r254:67916)),我前段时间设置了一个环境变量,以便Python 总是运行无缓冲(在Windows上,这是PYTHONUNBUFFERED = YES,或者其他什么替换为YES的非空字符串然后忘了它。删除env.var。为我解决了这个问题。

因此检查此环境变量可能是值得的。它没有默认设置。

答案 1 :(得分:4)

现在样品已被清理,看来问题出在线路终端上。

这不是解决方案,但是如果您创建包含此代码的文件t.py,运行它,然后输入一些文本会发生什么?:

import sys; print(repr(sys.stdin.readline()))

如果你键入类似2+2的内容,那么运气好的话会告诉你Python解释器在你的例子中得到了什么,反过来可能会给出一些问题的线索。

您也可以在命令提示符下尝试:

python -c "import sys; print(repr(sys.stdin.readline()))"

这将允许您键入一行并显示该行的详细信息。

答案 2 :(得分:0)

有一次,在2002年,我设法构建了一个无法在Windows行结束时运行的Python版本。它会给出这样的语法错误,指向行的末尾。我发现在这种情况下这不太可能是一个问题,特别是因为你使用的是Windows安装。

当我无意中使用不间断的空格而不仅仅是空格时,我也遇到了类似的问题,但是我不知道如何从提示中发生这种情况,除此之外你2 + 2的例子不使用空格或引号这也可能是一个问题。

您使用的是哪种编码和键盘设置?

答案 3 :(得分:0)

这是一个担心:

C:\Program Files\Python31>.\python

将当前目录设置为软件安装目录运行软件绝不是一个好主意。您冒着创建干扰软件运行的文件的风险。当你开始得到错误和奇怪的行为时,随之而来的颠簸会使情况完全失控。

这样更好:

C:\ somewhere_else_with_no_spaces&gt;“c:\ program files \ python31 \ python”

最好是将它从“程序文件”中删除。除非我记错了,否则建议的安装文件夹将是C:\Python31,这很好,因为您不需要像使用“程序文件”时那样使用引号。 AFAIK没有充分的理由在“程序文件”中使用软件。

一些诊断:

一个。打开命令提示符窗口 B.输入:dir "c:\program files\python31"
C.将步骤B中的结果复制/粘贴到您的问题的编辑中,即不要将其放在评论中。

如果你回答(在你的问题的编辑中)有人询问键盘宏的问题会有所帮助...也考虑过度智能键盘的可能性,以及拥有多个IME而不使用“正确”一。此外,除了Python之外的任何其他软件都会出现这种情况吗?

答案 4 :(得分:0)

我面临同样的问题,即使它可能与您不一样,但是有另一种诊断方法,您应该始终设置历史文件。

enter image description here

我通过vim历史文件找出了原因(如果hexdump -C没有显示隐藏的字符,您可能会考虑vim):

enter image description here

根据http://www.w3.org/International/questions/qa-bidi-controls

  

RLM和LRM字符

     

另外两个不可见但非嵌入的方向控制字符   由Unicode提供通常没有相应的标记和   应该以字符或转义形式使用。请注意它们是   问题较少,因为它们是单独使用,而不是成对划分   我们讨论过的其他控制字符的文本范围。

U+200E:   LEFT-TO-RIGHT MARK
U+200F:   RIGHT-TO-LEFT MARK

原因是因为我直接从在线代码中复制/粘贴(我知道它在安全方面很危险),其中包含隐藏的RLM和LRM字符。