Неожиданный EOF Python при разборе

82

Вот мой код на 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
>>> 
Веб-дизайнер
источник

Ответы:

122

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

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

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

Справка

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

Саймон
источник
У меня это сработало! Но я не уверен, почему моя установка Linux Mint 18.3 запускает Python 2, хотя я установил Python 3 ...
Баджиру,
1
В Mint 18.3 (и в Ubuntu Xenial, на которой он основан) /usr/bin/pythonесть исполняемый файл python 2 и /usr/bin/python3ваш исполняемый файл python 3. Я считаю, что в Mint 19 системным питоном по умолчанию является python 3.
simon
16

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

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

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

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

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

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

Образец кода

#-*- coding: latin1 -*-

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

    ....
Сентил Кумаран
источник
Хорошо, это была ошибка синтаксиса. Теперь позвольте мне исправить другие ошибки.
Senthil Kumaran
1
Тело цикла имеет отступ: отступ - это способ группировки операторов в Python. В интерактивном запросе вы должны ввести табуляцию или пробел для каждой строки с отступом.
Джереми А. Вест
6

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

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

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

JGFMK
источник
4

Хотя ответ @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? ")
PaulMest
источник
4

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

if sys.version_info < (3, 0):
    input = raw_input
Гух
источник
3

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

try :
 ....

поскольку python искал

except Exception as e:
 ....

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

Приянк Патхак
источник
1

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

При появлении запроса на консоли вы должны ввести «12/12/2015» - обратите внимание на то, "что было до и после. Таким образом, он будет воспринимать это как строку и обрабатывать ее, как ожидалось. Я не уверен, что это ограничение этого inputметода - но он работает именно так.

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

user3607430
источник
1

После первого оператора 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 `
Коннор Ирвин
источник
0

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

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

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

    #input=raw_input 

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

    input=raw_input 

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

Джош
источник
0

Проверьте версию вашего компилятора.

  1. если вы имеете дело с Python2, используйте -

n= raw_input("Enter your Input: ")

  1. если вы имеете дело с использованием python3 -

n= input("Enter your Input: ")

Нандини Ашок Туптевар
источник
-2

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

Аниш Рам Сенати
источник