Python неожиданный EOF при разборе - PullRequest
72 голосов
/ 22 февраля 2011

Вот мой код на 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
>>> 

Ответы [ 10 ]

103 голосов
/ 22 февраля 2011

Используйте raw_input вместо input:)

Если вы используете input, то данные, которые вы тип интерпретируется как Python Выражение , которое означает, что вы в конечном итоге Gawd знает, какой тип объект в вашей целевой переменной, и черт из широкого спектра исключений это может быть сгенерировано. Так что вы должны НЕ используйте input, если не ставите что-то для временного тестирования, чтобы использоваться только тем, кто знает Немного о выражениях Python.

raw_input всегда возвращает строку потому что, черт возьми, это то, что вы всегда введите ... но тогда вы можете легко преобразовать его в конкретный тип, который вы хочу и поймать конкретное исключения, которые могут возникнуть. С надеждой с этим объяснением, это Понятно знать, что вы должны использовать.

Ссылка

Примечание: это только для Python 2. Для Python 3 raw_input() стало простым input(), а Python 2 input() был удален.

15 голосов
/ 22 февраля 2011

Сделать отступ! первым. Это позаботится о вашем SyntaxError.

Кроме того, в вашей программе есть еще пара проблем.

  • Используйте raw_input, если вы хотите принять строку в качестве ввода. input принимает только выражения Python и eval для них.

  • Вы используете в своем скрипте определенные 8-битные символы, такие как . Возможно, вам потребуется определить кодировку в верхней части вашего скрипта, используя строку # -*- coding:latin-1 -*-, обычно называемую coding-cookie.

  • Кроме того, во время сравнения строк нормализуйте строки и сравните. (люди, использующие lower () it) Это помогает обеспечить небольшую гибкость при вводе пользователем.

  • Я также думаю, что чтение учебника по Python может быть полезным для вас. :)

Пример кода

#-*- coding: latin1 -*-

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

    ....
4 голосов
/ 01 апреля 2016

Хотя ответ @ simon наиболее полезен в Python 2, raw_input отсутствует в Python 3. Я бы предложил сделать следующее, чтобы убедиться, что ваш код одинаково хорошо работает в Python 2 и Python 3:

Во-первых, будущее установки pip:

$ 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? ")
3 голосов
/ 26 апреля 2018

У меня была эта ошибка из-за отсутствия закрывающей скобки в строке.

У меня возникла проблема со строкой: invalid syntax (<string>, line ...)? в конце моего скрипта.

Я удалил эту строку, затем получил сообщение EOF.

3 голосов
/ 20 сентября 2017

Я использую следующий код для обеспечения совместимости с Python 2 и 3

if sys.version_info < (3, 0):
    input = raw_input
3 голосов
/ 02 сентября 2017

Я пытаюсь ответить вообще, не относясь к этому вопросу, эта ошибка обычно возникает, когда вы нарушаете синтаксис пополам и забываете другую половину.Как и в моем случае это было:

try :
 ....

, так как python искал

except Exception as e:
 ....

, но обнаружил EOF (конец файла), отсюда и ошибка.Посмотрите, сможете ли вы найти какой-нибудь неполный синтаксис в вашем коде.

1 голос
/ 06 июня 2016

После первого оператора 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 `
1 голос
/ 22 февраля 2015

Я сталкивался с тем же самым, и я понял, в чем проблема.Когда мы используем метод input, ответ, который мы должны напечатать, должен быть в двойных кавычках.Как и в вашей строке date=input("Example: March 21 | What is the date? ")

Вы должны печатать при появлении запроса на консоли "12.12.2015" - обратите внимание на вещь " до и после.Таким образом, он будет воспринимать это как строку и обрабатывать, как ожидается.Я не уверен, является ли это ограничением этого input метода - но он работает следующим образом.

Надеюсь, это поможет

0 голосов
/ 17 сентября 2016

Проверьте, все ли параметры функций определены до их вызова. Я столкнулся с этой проблемой во время практики Kaggle.

0 голосов
/ 23 июня 2013

Что вы можете попробовать, так это написать свой код как обычный для python, используя обычную команду input. Однако хитрость заключается в том, чтобы добавить в начале вашей программы команду input=raw_input.

Теперь все, что вам нужно сделать, это отключить (или включить) в зависимости от того, работаете ли вы в Python / IDLE или Terminal. Вы делаете это, просто добавляя «#», когда это необходимо.

Отключено для использования в Python / IDLE

    #input=raw_input 

И, конечно, включен для использования в терминале.

    input=raw_input 

Я не уверен, что он всегда будет работать, но это возможное решение для простых программ или скриптов.

...