Python交互式解释器在Windows上总是返回“无效语法”
我遇到了一个非常让人困惑的问题。无论我在Python解释器中输入什么,都会返回“无效的语法”。下面是一些例子。我尝试过调整我运行解释器的命令提示符的代码页面,但似乎没有任何帮助。
而且,我在网上也找不到这个特别奇怪的错误。
如果有人能提供帮助,那就太好了。我已经尝试重新安装Python,但没有成功——这个问题在3.1.3和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 个回答
大约在2002年的时候,我曾经搞过一个版本的Python,它不能处理Windows系统的换行符。这样的话,它会在行末报语法错误。我觉得在这种情况下出现问题的可能性不大,尤其是你用的是Windows的安装版本。
我也遇到过类似的问题,那是因为我不小心用了不间断空格,而不是普通的空格。不过我想不出在命令行中会出现这种情况。而且你提到的2+2这个例子也没有用到空格或引号,这也可能是个问题。
你现在用的是什么编码和键盘设置呢?
现在样本已经整理好了,看来问题出在行结束符上。
这不是解决方案,但如果你创建一个名为 t.py
的文件,里面写上这些代码,运行它,然后输入一些文本,会发生什么呢?
import sys; print(repr(sys.stdin.readline()))
如果你输入类似 2+2
的内容,那么运气好的话,这会显示出 Python 解释器在你的例子中接收到的内容,这可能会给你一些关于问题的线索。
你也可以在命令提示符下尝试这个:
python -c "import sys; print(repr(sys.stdin.readline()))"
这样你就可以输入一行代码,并显示那一行的详细信息。
在使用Python进行交互式编程时,如果没有缓冲区,会出现一个已知的问题,这个问题计划在3.2版本中修复,可能会被移植到旧版本中,具体可以查看这个链接:http://bugs.python.org/issue11098
这个问题比较麻烦,因为你可能在不知情的情况下就使用了没有缓冲的输入输出。在我的情况下(Python 2.5.4 (r254:67916)),我之前设置了一个环境变量,让Python 总是以无缓冲的方式运行(在Windows上,这个变量是PYTHONUNBUFFERED=YES,或者用其他非空字符串替代YES),然后我就忘了这件事。最后,删除这个环境变量解决了我的问题。
所以,检查一下这个环境变量可能是个好主意。默认情况下是没有设置这个变量的。