Python 解析时遇到意外的 EOF
这是我的Python代码。有人能告诉我它哪里出问题了吗?
while 1:
date=input("Example: March 21 | What is the date? ")
if date=="June 21":
sd="23.5° North Latitude"
if date=="March 21" | date=="September 21":
sd="0° Latitude"
if date=="December 21":
sd="23.5° South Latitude"
if sd:
print sd
然后,这里是发生了什么:
>>>
Example: March 21 | What is the date?
Traceback (most recent call last):
File "C:\Users\Daniel\Desktop\Solar Declination Calculater.py", line 2, in <module>
date=input("Example: March 21 | What is the date? ")
File "<string>", line 0
^
SyntaxError: unexpected EOF while parsing
>>>
10 个回答
我遇到了这个错误,是因为某一行缺少了一个闭合的括号。
一开始,我在脚本的最后一行看到一个问题,提示说:invalid syntax (<string>, line ...)?
我把那一行删掉了,然后又出现了EOF的提示。
先缩进! 这样可以解决你的 SyntaxError
问题。
除此之外,你的程序还有几个其他问题。
当你想要接受字符串作为输入时,使用
raw_input
。因为input
只接受 Python 表达式,并会对它们进行eval
操作。你的代码中使用了一些 8 位字符,比如
0°
。你可能需要在脚本的顶部定义编码,使用# -*- coding:latin-1 -*-
这一行,通常称为编码声明。另外,在进行字符串比较时,最好先规范化字符串再进行比较。很多人会使用
lower()
方法,这样可以让用户输入时更灵活。我觉得阅读一些 Python 教程对你会有帮助。:)
示例代码
#-*- coding: latin1 -*-
while 1:
date=raw_input("Example: March 21 | What is the date? ")
if date.lower() == "march 21":
....
用 raw_input
代替 input
:)
如果你使用
input
,那么你输入的数据会被当作一个Python表达式来解释,这样你得到的变量类型就可能是各种各样的,甚至会出现很多不同的错误。所以,除非你只是临时测试一下,或者你对Python表达式有一定了解的人在用,不然不要使用input
。
raw_input
总是返回一个字符串,因为你输入的内容本来就是字符串……然后你可以很容易地把它转换成你想要的特定类型,并且处理可能出现的特定错误。希望通过这个解释,你能很清楚地知道该用哪个。
注意:这只适用于Python 2。在Python 3中,raw_input()
变成了普通的 input()
,而Python 2中的 input()
被移除了。