Подтвердить что ты не робот

Неожиданный 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
>>> 
4b9b3361

Ответ 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-битные символы, например . Возможно, вам потребуется определить кодировку в верхней части вашего 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.