Python 解析时遇到意外的 EOF

85 投票
10 回答
497446 浏览
提问于 2025-04-16 12:16

这是我的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 个回答

8

我遇到了这个错误,是因为某一行缺少了一个闭合的括号。

一开始,我在脚本的最后一行看到一个问题,提示说:invalid syntax (<string>, line ...)?

我把那一行删掉了,然后又出现了EOF的提示。

15

先缩进! 这样可以解决你的 SyntaxError 问题。

除此之外,你的程序还有几个其他问题。

  • 当你想要接受字符串作为输入时,使用 raw_input。因为 input 只接受 Python 表达式,并会对它们进行 eval 操作。

  • 你的代码中使用了一些 8 位字符,比如 。你可能需要在脚本的顶部定义编码,使用 # -*- coding:latin-1 -*- 这一行,通常称为编码声明。

  • 另外,在进行字符串比较时,最好先规范化字符串再进行比较。很多人会使用 lower() 方法,这样可以让用户输入时更灵活。

  • 我觉得阅读一些 Python 教程对你会有帮助。:)

示例代码

#-*- coding: latin1 -*-

while 1:
    date=raw_input("Example: March 21 | What is the date? ")
    if date.lower() == "march 21":

    ....
127

raw_input 代替 input :)

如果你使用 input,那么你输入的数据会被当作一个Python表达式来解释,这样你得到的变量类型就可能是各种各样的,甚至会出现很多不同的错误。所以,除非你只是临时测试一下,或者你对Python表达式有一定了解的人在用,不然不要使用 input

raw_input 总是返回一个字符串,因为你输入的内容本来就是字符串……然后你可以很容易地把它转换成你想要的特定类型,并且处理可能出现的特定错误。希望通过这个解释,你能很清楚地知道该用哪个。

参考链接

注意:这只适用于Python 2。在Python 3中,raw_input() 变成了普通的 input(),而Python 2中的 input() 被移除了。

撰写回答