wake-up-neo.net

Python unerwartet EOF beim Parsen

Hier ist mein Python-Code. Könnte mir jemand zeigen, was daran falsch ist?.

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

Und hier ist was passiert:

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

Verwenden Sie raw_input anstelle von input :)

Wenn Sie input verwenden, werden die Daten type wird als Python .__ interpretiert. Ausdruck was bedeutet, dass Sie am Ende weiß gawd, welche Art von Objekt in Ihrer Zielvariablen und eine Eine Vielzahl von Ausnahmen das kann erzeugt werden. Deshalb solltest du NICHT verwendet input, es sei denn, Sie setzen etwas für temporäre Tests, um darf nur von jemandem verwendet werden, der eine .__ kennt. ein bisschen über Python-Ausdrücke.

raw_input gibt immer einen String zurück denn, verdammt, das ist es, was du immer. tippen Sie ein ... aber dann können Sie problemlos konvertieren Sie es in den bestimmten Typ, den Sie wollen und fangen die spezifischen Ausnahmen, die auftreten können. Hoffnungsvoll Mit dieser Erklärung ist es eine kein Kinderspiel zu wissen, welche Sie sollten benutzen.

Referenz

Hinweis: Dies ist nur für Python 2. Für Python 3 wurde raw_input() zu input() und die Python 2 input() wurde entfernt.

97
simon

Einrücken es! zuerst. Das würde sich um Ihre SyntaxError kümmern.

Abgesehen davon gibt es noch einige andere Probleme in Ihrem Programm.

  • Verwenden Sie raw_input, wenn Sie eine Zeichenfolge als Eingabe akzeptieren möchten. input nimmt nur Python-Ausdrücke und führt einen eval für sie aus.

  • Sie verwenden in Ihrem Skript bestimmte 8-Bit-Zeichen wie . Möglicherweise müssen Sie die Codierung oben in Ihrem Skript mithilfe der # -*- coding:latin-1 -*--Zeile definieren, die üblicherweise als Codierungs-Cookie bezeichnet wird.

  • Beim Str-Vergleich normalisieren Sie außerdem die Strings und vergleichen sie. (Personen, die lower () verwenden) Dies hilft, durch Benutzereingaben wenig Flexibilität zu geben.

  • Ich denke auch, dass das Lesen des Python-Tutorials für Sie hilfreich sein kann. :)

Beispielcode

#-*- coding: latin1 -*-

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

    ....
13
Senthil Kumaran

Während die Antwort von @ simon in Python 2 am hilfreichsten ist, ist raw_input in Python 3 nicht vorhanden. Ich würde Folgendes tun, um sicherzustellen, dass Ihr Code in Python 2 und Python 3 gleich gut funktioniert:

Zuerst pip install future:

$ pip install future

Zweitens: Import von Eingaben aus future.builtins

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

Und für das oben aufgeführte Beispiel:

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

Ich versuche im Allgemeinen zu antworten, nicht im Zusammenhang mit dieser Frage. Dieser Fehler tritt im Allgemeinen auf, wenn Sie eine Syntax in zwei Hälften teilen und die andere Hälfte vergessen. Wie in meinem Fall war es:

try :
 ....

da suchte python nach a 

except Exception as e:
 ....

es ist jedoch ein EOF (End Of File) aufgetreten, daher der Fehler. Prüfen Sie, ob Sie in Ihrem Code eine unvollständige Syntax finden können.

3
Priyank Pathak

Ich verwende den folgenden Code, um die Kompatibilität von Python 2 und 3 zu erhalten

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

Ich hatte diesen Fehler wegen einer fehlenden schließenden Klammer in einer Zeile.

Am Anfang meines Skripts stand eine Ausgabe mit der folgenden Zeile: invalid syntax (<string>, line ...)?

Ich löschte diese Zeile und erhielt die Nachricht EOF.

2
JGFMK

Geben Sie nach der ersten if-Anweisung anstelle von "if" "Elif" ein und dann sollte es funktionieren.

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
Climberirw

ich bin auf dasselbe gestoßen und habe herausgefunden, was das Problem ist. Wenn wir die Methodeneingabe verwenden, sollte die Antwort, die wir eingeben sollten, in doppelte Anführungszeichen gesetzt werden. Wie in Ihrer Zeile date=input("Example: March 21 | What is the date? ")

Sie sollten bei der Aufforderung in der Konsole "12/12/2015" eingeben - notieren Sie den Code " vor und nach dem Vorgang. Auf diese Weise wird es als String verwendet und wie erwartet verarbeitet. Ich bin nicht sicher, ob dies eine Einschränkung dieser input-Methode ist - aber es funktioniert auf diese Weise.

Ich hoffe es hilft

1
user3607430

Sie können versuchen, Ihren Code mit dem normalen input-Befehl als normal für Python zu schreiben. Der Trick besteht jedoch darin, zu Beginn Ihres Programms den Befehl input=raw_input hinzuzufügen.

Jetzt müssen Sie nur noch deaktivieren (oder aktivieren), je nachdem, ob Sie Python/IDLE oder Terminal ausführen. Sie tun dies, indem Sie bei Bedarf einfach '#' hinzufügen.

Für die Verwendung in Python/IDLE ausgeschaltet

    #input=raw_input 

Und natürlich für den Einsatz im Terminal eingeschaltet. 

    input=raw_input 

Ich bin nicht sicher, ob es immer funktionieren wird, aber es ist eine mögliche Lösung für einfache Programme oder Skripte.

0
joesh