Python onverwachte EOF tijdens het parseren

Hier is mijn python-code. Kan iemand me laten zien wat er mis mee is.

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

En dit is wat er gebeurt:

>>> 
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
>>> 

Antwoord 1, autoriteit 100%

Gebruik raw_inputin plaats van input🙂

Als u inputgebruikt, dan zijn de gegevens die u
type is wordt geïnterpreteerd als een Python
Expressie
wat betekent dat je
eindigen met gawd weet wat voor soort?
object in uw doelvariabele, en a
heck van een breed scala aan uitzonderingen
die kan worden gegenereerd. Dus je zou moeten
NIETgebruik inputtenzij je zet
iets in voor tijdelijk testen, om
alleen worden gebruikt door iemand die weet
beetje over Python-expressies.

raw_inputretourneert altijd een tekenreeks
want ach, dat is wat je altijd doet
typ in … maar dan kun je gemakkelijk
converteer het naar het specifieke type dat je hebt
willen, en vang de specifieke
uitzonderingen die zich kunnen voordoen. Hopelijk
met die uitleg is het een
no-brainer om te weten welke je moet
gebruik.

Referentie

Opmerking: dit is alleen voor Python 2. Voor Python 3 is raw_input()gewoon input()geworden en de Python 2 input()is verwijderd.


Antwoord 2, autoriteit 13%

Laat het inspringen!eerst. Dat zou zorgen voor uw SyntaxError.

Afgezien daarvan zijn er nog een aantal andere problemen in uw programma.

  • Gebruik raw_inputals je string als invoer wilt accepteren. inputaccepteert alleen Python-expressies en er wordt een evalop uitgevoerd.

  • Je gebruikt bepaalde 8-bits tekens in je script, zoals . Mogelijk moet u de codering bovenaan uw script definiëren met behulp van de regel # -*- coding:latin-1 -*-die gewoonlijk coderingscookie wordt genoemd.

  • Ook, terwijl u str-vergelijking uitvoert, normaliseert u de tekenreeksen en vergelijkt u deze. (mensen die lower() it gebruiken) Dit helpt bij het geven van weinig flexibiliteit bij gebruikersinvoer.

  • Ik denk ook dat het lezen van de Python-tutorial nuttig voor je kan zijn. 🙂

Voorbeeldcode

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

Antwoord 3, autoriteit 6%

Ik had deze fout vanwege een ontbrekend haakje sluiten op een regel.

Ik had eerst een probleem met een regel waarin stond:
invalid syntax (<string>, line ...)?
aan het einde van mijn script.

Ik heb die regel verwijderd en kreeg toen het EOF-bericht.


Antwoord 4, autoriteit 3%

Hoewel het antwoord van @simon het meest nuttig is in Python 2, is raw_inputniet aanwezig in Python 3. Ik raad je aan het volgende te doen om ervoor te zorgen dat je code even goed werkt in Python 2 en Python 3 :

Eerst, pip install future:

$ pip install future

Ten tweede: invoer importeren uit future.builtins

# my_file.py    
from future.builtins import input
str_value = input('Type something in: ')

En voor het specifieke voorbeeld hierboven:

# example.py
from future.builtins import input
my_date = input("Example: March 21 | What is the date? ")

Antwoord 5, autoriteit 3%

Ik gebruik de volgcode om compatibiliteit met Python 2 en 3 te krijgen

if sys.version_info < (3, 0):
    input = raw_input

Antwoord 6, autoriteit 2%

Ik probeer in het algemeen te antwoorden, niet gerelateerd aan deze vraag, deze fout treedt meestal op wanneer je een syntaxis doormidden breekt en de andere helft vergeet. Zoals in mijn geval was het:

try :
 ....

sinds python op zoek was naar een

except Exception as e:
 ....

maar er is een EOF (End Of File) aangetroffen, vandaar de fout. Kijk of je een onvolledige syntaxis in je code kunt vinden.


Antwoord 7

ik kwam hetzelfde tegen en ik ben erachter wat het probleem is. Wanneer we de methodeinvoer gebruiken, moet het antwoord dat we moeten typen tussen dubbele aanhalingstekens staan. Zoals in jouw lijn
date=input("Example: March 21 | What is the date? ")

U moet typen wanneer u wordt gevraagd op console “12/12/2015” – Let op de "ding voor en na. Op deze manier zal het dat als een string duren en het als verwacht worden zoals verwacht. Niet zeker of dit beperking is van deze inputmethode – maar het werkt op deze manier.

Ik hoop dat het helpt


Antwoord 8

Na de eerste IF-instructie in plaats van te typen “Als” type “Elif” en dan moet werken.

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 `

Antwoord 9

Wat u kunt proberen is uw code als normaal schrijven voor Python met behulp van de normale input-opdracht. De truc is echter om aan het begin van u de opdracht input=raw_inputtoe te voegen.

Nu hoe u hoeft te doen, is uitschakelen (of inschakelen), afhankelijk van als u in Python / Stationair of Terminal gebruikt. Je doet dit door simpelweg ‘#’ toe te voegen wanneer nodig.

Geschakeld voor gebruik in Python / Stationair

   #input=raw_input 

en natuurlijk ingeschakeld voor gebruik in terminal.

   input=raw_input 

Ik weet niet zeker of het altijd zal werken, maar het is een mogelijke oplossing voor eenvoudige programma’s of scripts.


Antwoord 10

Controleer de versie van uw compiler.

  1. Als u te maken hebt met Python2, gebruik dan –

n= raw_input("Enter your Input: ")

  1. als je te maken hebt met python3 gebruik –

n= input("Enter your Input: ")


Antwoord 11

Controleer of alle parametersvan functies gedefinieerdzijn voordat ze worden aangeroepen.
Ik kwam dit probleem tegen tijdens het beoefenen van Kaggle.

Other episodes