Pythonparsing时意外的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 >>> 

使用raw_input而不是input 🙂

如果使用input ,则input的数据将被解释为Pythonexpression式 ,这意味着最终gawd知道目标variables中的对象types,以及可以生成的各种exception。 所以你不应该使用input除非你把某些东西放在临时testing中,只能被那些了解Pythonexpression式的人使用。

raw_input总是返回一个string,因为,这就是你总是input的内容…但是,你可以很容易地将其转换为你想要的特定types,并捕获可能发生的特定exception。 希望通过这个解释,知道你应该使用哪一个是不费吹灰之力的。

参考

注意:这仅适用于Python 2.对于Python 3, raw_input()已成为纯input() ,Python 2 input()已被删除。

缩进! 第一。 这将照顾你的SyntaxError

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

  • 当你想接受string作为input时使用raw_inputinput只接受Pythonexpression式,并对它们进行eval

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

  • 另外,在进行str比较的同时,对string进行规范化并进行比较。 (使用lower()的人)这有助于给用户input提供很小的灵活性。

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

示例代码

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

虽然@ simon的答案在Python 2中最有用,但Python 3中不存在raw_input 。为了确保你的代码在Python 2和Python 3中同样工作,我build议你做下面的事情:

首先,pip安装将来:

 $ pip install future 

第二:从future.builtins导入input

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

在第一个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 ` 

我试图回答一般情况,与这个问题无关,这个错误一般发生在当你把句法分成两半而忘记另一半的时候。 就像我的情况一样:

 try : .... 

因为python正在寻找一个

 except Exception as e: .... 

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

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

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

你可以尝试使用正常的input命令来编写python的代码。 然而诀窍是在你开始的时候添加命令input=raw_input

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

closures以在Python / IDLE中使用

  #input=raw_input 

当然,打开在terminal使用。

  input=raw_input 

我不知道它是否会一直工作,但它是一个简单的程序或脚本的可能的解决scheme。

我遇到了同样的事情,我想清楚是什么问题。 当我们使用方法input时,我们应该input的响应应该用双引号。 就像在你的date=input("Example: March 21 | What is the date? ")

你应该在控制台“12/12/2015”提示时键入 – 注意"之前和之后的事情,这样它会把它作为一个string,并按预期处理,我不知道这是否是这种input法的限制 – 但它是这样工作的。

希望能帮助到你

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