Python 解析时出现意外的 EOF [重复]

问题描述 投票:0回答:10

这是我的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
>>> 
python eof python-2.x
10个回答
127
投票

使用

raw_input
代替
input
:)

如果您使用

input
,那么您的数据 类型被解释为 Python 表达这意味着你 最终得到了天啊知道什么类型 目标变量中的对象,以及 有各种各样的例外情况 可以生成的。所以你应该 NOT 使用
input
除非你要放 用于临时测试的东西,以 只能由了解的人使用 关于 Python 表达式的一些知识。

raw_input
始终返回一个字符串 因为,哎呀,这就是你总是这样的 输入...然后您就可以轻松地 将其转换为您的特定类型 想要,并抓住具体的 可能发生的异常情况。希望 有了这个解释,这是一个 不用想就知道你应该做什么 使用。

参考

注意:这仅适用于 Python 2。对于 Python 3,

raw_input()
已变为普通
input()
,并且 Python 2
input()
已被删除。


15
投票
首先

缩进!。这会照顾你的

SyntaxError

除此之外,您的程序中还存在其他一些问题。

  • 当您想要接受字符串作为输入时,请使用

    raw_input
    input
    仅接受 Python 表达式,并对它们执行
    eval

  • 您在脚本中使用了某些 8 位字符,例如

    。您可能需要使用通常称为“coding-cookie”的
    # -*- coding:latin-1 -*-
    行在脚本顶部定义编码。

  • 此外,在进行 str 比较时,规范化字符串并进行比较。 (人们使用 lower() it)这有助于为用户输入提供很少的灵活性。

  • 我也认为阅读Python教程可能对你有帮助。 :)

示例代码

#-*- coding: latin1 -*-

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

    ....

8
投票

我遇到了这个错误,因为一行中缺少右括号。

我一开始对这句话有疑问:

invalid syntax (<string>, line ...)?
在我的脚本的末尾。

我删除了该行,然后收到了 EOF 消息。


5
投票

我使用以下代码来获得 Python 2 和 3 兼容性

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

4
投票

虽然@simon的答案在Python 2中最有帮助,但

raw_input
在Python 3中不存在。我建议执行以下操作以确保您的代码在Python 2和Python 3中同样有效:

首先,pip install future:

$ pip install future

第二:从 future.builtins 导入输入

# my_file.py    
from future.builtins import input
str_value = input('Type something in: ')

对于上面列出的具体示例:

# example.py
from future.builtins import input
my_date = input("Example: March 21 | What is the date? ")

2
投票

我试图回答一般性问题,与这个问题无关,当您将语法分成两半而忘记另一半时,通常会发生此错误。就像我的例子一样:

try :
 ....

因为 python 正在寻找

except Exception as e:
 ....

但它遇到了 EOF(文件结束),因此出现错误。看看您是否可以在代码中找到任何不完整的语法。


1
投票

我遇到了同样的事情,我弄清楚了问题是什么。当我们使用方法输入时,我们应该输入的响应应该用双引号引起来。就像你的行一样

date=input("Example: March 21 | What is the date? ")

您应该在控制台提示“12/12/2015”时输入 - 请注意前后的

"
内容。这样它就会将其作为字符串并按预期进行处理。我不确定这是否是此
input
方法的限制 - 但它是这样工作的。

希望有帮助


1
投票

在第一个 if 语句之后,不要输入“if”,而是输入“elif”,然后它应该可以工作。

例如。

`    while 1:
    date=input("Example: March 21 | What is the date? ")
if date=="June 21":
    sd="23.5° North Latitude
elif date=="March 21" | date=="September 21":
    sd="0° Latitude"
elif date=="December 21":
    sd="23.5° South Latitude"
elif sd:
    print sd `

0
投票

您可以尝试使用正常的

input
命令正常编写 Python 代码。然而,诀窍是在编程开始时添加命令
input=raw_input

现在您所要做的就是禁用(或启用),具体取决于您是在 Python/IDLE 还是终端中运行。您只需在需要时添加“#”即可实现此目的。

在 Python/IDLE 中使用时关闭

    #input=raw_input 

当然,打开后可以在终端中使用。

    input=raw_input 

我不确定它是否总是有效,但它是简单程序或脚本的可能解决方案。


0
投票

检查你的编译器版本。

  1. 如果你正在处理Python2,那么使用-

n= raw_input("Enter your Input: ")

  1. 如果你正在处理 python3 使用 -

n= input("Enter your Input: ")

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.