解析时Python发生意外的EOF


82

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

Answers:


122

使用raw_input代替input:)

如果使用input,则您键入的数据将被解释为Python表达式,这意味着您最终以gawd知道目标变量中的对象类型,以及可能生成的大量异常。因此, 除非将一些东西用于临时测试,否则不要使用input,仅供对Python表达式有一点了解的人使用。

raw_input总是返回一个字符串,因为,这就是您经常键入的内容,但是您可以轻松地将其转换为所需的特定类型,并捕获可能发生的特定异常。希望有了这个解释,您不难知道应该使用哪个。

参考

注意:这仅适用于Python2。对于Python 3,它raw_input()已经变得很普通,input()并且input()删除了Python 2 。


它为我工作!但是,我不确定为什么我的Linux Mint 18.3安装程序运行Python 2,即使我已经安装了Python 3 ...
Bajiru

1
在Mint 18.3(以及基于它的Ubuntu Xenial)中,它/usr/bin/python是python 2可执行文件,/usr/bin/python3也是python 3可执行文件。我相信,对于Mint 19,系统默认的python是python 3。
simon

16

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

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

  • 使用raw_input时,你要接受字符串作为输入。input只接受Python表达式,并对其进行eval处理。

  • 您在脚本中使用了某些8位字符,例如。您可能需要使用# -*- coding:latin-1 -*-通常称为encoding -cookie的行在脚本顶部定义编码。

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

  • 我还认为阅读Python教程可能对您有所帮助。:)

样例代码

#-*- coding: latin1 -*-

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

    ....

好的,那是因为语法错误。现在让我编辑其他错误。
Senthil Kumaran

1
循环的主体是缩进的:缩进是Python对语句进行分组的方式。在交互式提示下,您必须为每个缩进的行键入一个制表符或空格。
杰里米·A·韦斯特

6

由于行中缺少右括号,我遇到了此错误。

我开始遇到一个问题,上面写着一行: invalid syntax (<string>, line ...)? 在脚本的结尾。

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


4

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

首先,点子安装的未来:

$ 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? ")

4

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

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

3

我正在尝试回答与该问题无关的一般情况,当您将语法分成两半而忘记另一半时,通常会发生此错误。就我而言,它是:

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

您可以尝试使用normalinput命令为python正常编写代码。但是,诀窍是在编程开始时添加命令input=raw_input

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

已关闭以在Python / IDLE中使用

    #input=raw_input 

当然可以在终端上使用。

    input=raw_input 

我不确定它是否会一直运行,但是它可能是简单程序或脚本的解决方案。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.