Неожиданный EOF Python при разборе
Вот мой код на 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
>>>
Ответы
Ответ 1
Используйте raw_input
вместо input
:)
Если вы используете input
, то данные, которые вы type is интерпретируется как Python Выражение, что означает, что вы в конечном итоге с gawd знает, какой тип объекта в вашей целевой переменной и heck из широкого спектра исключений которые могут быть сгенерированы. Так что вы должны НЕ используйте input
, если вы не используете что-то для временного тестирования, чтобы будет использоваться только тем, кто знает бит о выражениях Python.
raw_input
всегда возвращает строку потому что, черт возьми, что ты всегда введите..., но тогда вы можете легко преобразуйте его в определенный тип хотите, и поймать конкретные исключения, которые могут произойти. С надеждой с этим объяснением, это не зная, что вы должны использовать.
Ссылка
Примечание: это только для Python 2. Для Python 3, raw_input()
стал простым input()
и Python 2 input()
был удален.
Ответ 2
Отступьте это!. Это позаботится о вашем SyntaxError
.
Кроме того, в вашей программе есть несколько других проблем.
-
Используйте raw_input
, если вы хотите принять строку в качестве ввода. input
принимает только выражения Python и на них eval
.
-
В вашем script вы используете определенные 8-битные символы, например 0°
. Возможно, вам потребуется определить кодировку в верхней части вашего script, используя строку # -*- coding:latin-1 -*-
, обычно называемую как код файл cookie.
-
Также, выполняя сравнение str, нормализуйте строки и сравните. (люди, использующие lower() it) Это помогает в предоставлении небольшой гибкости при вводе пользователя.
-
Я также считаю, что чтение руководства Python может оказаться полезным для вас.:)
Пример кода
#-*- coding: latin1 -*-
while 1:
date=raw_input("Example: March 21 | What is the date? ")
if date.lower() == "march 21":
....
Ответ 3
Хотя ответ @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? ")
Ответ 4
Я пытаюсь ответить вообще, не связанный с этим вопросом, эта ошибка обычно возникает, когда вы разбиваете синтаксис пополам и забываете другую половину. Как в моем случае это было:
try :
....
поскольку python искал
except Exception as e:
....
но он столкнулся с EOF (End Of File), поэтому ошибка. Посмотрите, можете ли вы найти какой-либо неполный синтаксис в своем коде.
Ответ 5
После первого оператора if вместо ввода "if" введите "elif", а затем он должен работать.
Ex.
` 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 `
Ответ 6
Я использую следующий код, чтобы получить совместимость с Python 2 и 3.
if sys.version_info < (3, 0):
input = raw_input
Ответ 7
Что вы можете попробовать написать свой код как обычно для python, используя обычную команду input
. Однако трюк заключается в том, чтобы добавить в начале вашей программы команду input=raw_input
.
Теперь все, что вам нужно сделать, - отключить (или включить) в зависимости от того, работаете ли вы в Python/IDLE или Terminal. Вы делаете это, просто добавляя "#", когда это необходимо.
Выключено для использования в Python/IDLE
#input=raw_input
И, конечно, он включен для использования в терминале.
input=raw_input
Я не уверен, что он всегда будет работать, но это возможное решение для простых программ или скриптов.
Ответ 8
Я столкнулся с одним и тем же, и я понял, в чем проблема. Когда мы используем ввод метода, ответ, который мы должны вводить, должен быть в двойных кавычках. Как в вашей линии
date=input("Example: March 21 | What is the date? ")
Вы должны ввести, когда будет предложено на консоли "12/12/2015" - обратите внимание на "
до и после. Таким образом, он примет это как строку и обработает ее, как ожидалось. Я не уверен, что это ограничение этого метода input
, но он работает таким образом.
Надеюсь, что это поможет
Ответ 9
Убедитесь, что все параметры функций определены до их вызова.
Я столкнулся с этой проблемой, практикуя Kaggle.