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_input
。input
只接受Pythonexpression式,并对它们进行eval
。 -
您正在脚本中使用某些8位字符,例如
0°
。 您可能需要使用# -*- 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时遇到了这个问题。