解析 [duplicate] 时 Python 意外的 EOF

Python unexpected EOF while parsing [duplicate]

提问人:Web_Designer 提问时间:2/22/2011 最后编辑:Karl KnechtelWeb_Designer 更新时间:9/3/2022 访问量:495723

问:

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

评论


答:

15赞 Senthil Kumaran 2/22/2011 #1

缩进它!第一。那会照顾你的.SyntaxError

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

  • 当您希望接受字符串作为输入时使用。 只接受 Python 表达式,并对它们执行操作。raw_inputinputeval

  • 您在脚本中使用了某些 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":

    ....

评论

0赞 Senthil Kumaran 2/22/2011
好的,那是语法错误。现在让我编辑其他错误。
1赞 Jeremy A. West 7/18/2018
循环的主体是缩进的:缩进是 Python 对语句进行分组的方式。在交互式提示符下,您必须为每个缩进行键入制表符或空格。
0赞 Karl Knechtel 9/3/2022
代码实际上是缩进的。人员(包括 OP)反复回滚代码以显示其缩进不正确,但 OP 报告的异常表明代码已正确缩进。来自 因为 在 2.x 中,它将输入评估为代码,并且输入不是有效的代码。由于错误来自那里,它不可能来自OP的实际代码,这意味着缩进是正确的。OP只是坚持错误地显示它。SyntaxErrorinput
127赞 simon 2/22/2011 #2

使用代替:)raw_inputinput

如果使用 ,则数据 type is 被解释为 Python 表达式,这意味着你 最终得到 Gawd 知道什么类型的 对象,以及 各种各样的例外情况 可以生成。所以你不应该使用,除非你把 一些用于临时测试的东西,以 仅由知道 关于 Python 表达式的位。inputinput

raw_input始终返回一个字符串 因为,哎呀,这就是你一直以来的 输入...但是你可以很容易地 将其转换为您所在的特定类型 想要,并抓住具体的 可能发生的异常。希望 有了这个解释,这是一个 不费吹灰之力就知道你应该做什么 用。

参考

注意:这仅适用于 Python 2。对于 Python 3,已变得简单,并且 Python 2 已被删除。raw_input()input()input()

评论

0赞 na-no. 6/13/2018
它对我有用!但是,我不确定为什么我的 Linux Mint 18.3 安装运行 Python 2,即使我已经安装了 Python 3......
2赞 simon 7/29/2018
在 Mint 18.3(以及它所基于的 Ubuntu Xenial)中,是 python 2 可执行文件,并且是 python 3 可执行文件。我相信,在 Mint 19 中,系统默认的 python 是 python 3。/usr/bin/python/usr/bin/python3
0赞 Karl Knechtel 9/3/2022
请注意,OP 的错误表示提供给的文本为。我不记得 2.x 在评估输入之前是否剥离了尾随换行符;如果不是,那么这意味着在代码运行之前必须以某种方式关闭标准输入。否则,它只是建议按 Enter 键以响应提示,而实际上不提供任何输入。但是,可以肯定的是,代码最初缩进了正确;否则,堆栈跟踪不会提及哪个证明它实际上被调用了。inputFile "<string>"input
0赞 joesh 6/24/2013 #3

您可以尝试使用 normal 命令像往常一样为 python 编写代码。但是,诀窍是在编程开始时添加命令。inputinput=raw_input

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

关闭以在 Python/IDLE 中使用

    #input=raw_input 

当然,还可以在终端中使用。

    input=raw_input 

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

1赞 Nauman Khan 2/22/2015 #4

我遇到了同样的事情,我弄清楚了问题所在。当我们使用方法输入时,我们应该输入的响应应该用双引号引起来。就像在你的生产线上一样date=input("Example: March 21 | What is the date? ")

您应该在控制台“12/12/2015”上出现提示时键入 - 注意之前和之后的事情。这样,它将把它作为一个字符串,并按预期进行处理。我不确定这是否是这种方法的局限性 - 但它是这样工作的。"input

希望对您有所帮助

4赞 PaulMest 4/1/2016 #5

虽然@simon的答案在 Python 2 中最有用,但在 Python 3 中却不存在。我建议执行以下操作,以确保您的代码在 Python 2 和 Python 3 中同样有效:raw_input

首先,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? ")
1赞 Connor Irwin 6/6/2016 #6

在第一个 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 `
-2赞 Anish Ram Senathi 9/17/2016 #7

在调用函数之前,请检查函数的所有参数是否都已定义。 我在练习 Kaggle 时遇到了这个问题。

2赞 Priyank Pathak 9/3/2017 #8

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

try :
 ....

由于 Python 正在搜索

except Exception as e:
 ....

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

5赞 Guhh 9/20/2017 #9

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

if sys.version_info < (3, 0):
    input = raw_input
8赞 JGFMK 4/27/2018 #10

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

我开始有一句台词有问题:在我的剧本末尾。invalid syntax (<string>, line ...)?

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

评论

1赞 Karl Knechtel 9/3/2022
问题不在于“此错误消息的可能原因是什么?问题是“为什么此代码会导致此错误消息?
0赞 JGFMK 9/3/2022
@Karl Knechtel - 正如你所看到的,6个人仍然发现它很有用。在谷歌上搜索消息...引线到这里。
0赞 Nandini Ashok Tuptewar 1/1/2021 #11

检查编译器的版本。

  1. 如果您正在处理 Python2,请使用 -

n= raw_input("Enter your Input: ")

  1. 如果您正在处理 python3,请使用 -

n= input("Enter your Input: ")