Ayrıştırma sırasında Python beklenmeyen EOF


82

İşte python kodum. Biri bana neyin yanlış olduğunu gösterebilir mi?

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

İşte olanlar:

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

Yanıtlar:


122

raw_inputBunun yerine kullanın input:)

Eğer kullanırsanız input, o zaman yazın veriler olarak yorumlanır olduğu Python İfade hangi gawd neyi hedef değişkeni nesnenin türünü ve üretilebilir istisnalar geniş bir halt bildiği ile sonun anlama geldiğini. Eğer gereken Yani DEĞİL kullanmak inputgeçici test için bir şey koyarak konum sürece, sadece Python ifadeleri hakkında biraz bilen birisi tarafından kullanılmak üzere.

raw_inputher zaman bir dize döndürür çünkü, heck, her zaman yazdığınız şey budur ... ancak sonra onu istediğiniz belirli türe kolayca dönüştürebilir ve oluşabilecek belirli istisnaları yakalayabilirsiniz. Umarım bu açıklama ile hangisini kullanmanız gerektiğini bilmek zahmetsizdir.

Referans

Not: Bu sadece Python 2 içindir. Python 3 için raw_input()sade hale geldi input()ve Python 2 input()kaldırıldı.


Benim için çalıştı! Ancak, Python 3'ü
kurmama

1
Mint 18.3'te (ve temel aldığı Ubuntu Xenial) /usr/bin/pythonbir python 2 çalıştırılabilir ve /usr/bin/python3sizin python 3 çalıştırılabilirinizdir. Mint 19 ile sistem varsayılan python'un python 3 olduğuna inanıyorum.
simon

16

Girintile! ilk. Bu seninle ilgilenirdi SyntaxError.

Bunun dışında programınızda birkaç başka sorun var.

  • Dizeyi raw_inputgirdi olarak kabul etmek istediğinizde kullanın . inputyalnızca Python ifadelerini alır ve evalüzerlerinde bir etki yapar .

  • Senaryonuzda gibi belirli 8bit karakterleri kullanıyorsunuz . Komut dosyanızın üst kısmındaki kodlamayı, # -*- coding:latin-1 -*-genellikle kodlama tanımlama bilgisi olarak adlandırılan satırı kullanarak tanımlamanız gerekebilir .

  • Ayrıca, str karşılaştırması yaparken dizeleri normalleştirin ve karşılaştırın. (low () it kullanan kişiler) Bu, kullanıcı girdisiyle çok az esneklik sağlamaya yardımcı olur.

  • Ayrıca Python eğitimini okumanın size yardımcı olabileceğini düşünüyorum. :)

Basit kod

#-*- coding: latin1 -*-

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

    ....

Tamam, bu Sözdizimi Hatası içindi. Şimdi diğer hataları düzeltmeme izin verin.
Senthil Kumaran

1
Döngünün gövdesi girintilidir: girinti, Python'un ifadeleri gruplama yöntemidir. Etkileşimli komut isteminde, her girintili satır için bir sekme veya boşluk yazmanız gerekir.
Jeremy A. West

6

Bir satırdaki eksik kapanış parantezi nedeniyle bu hatayı aldım.

Senaryomun invalid syntax (<string>, line ...)? sonunda : yazan bir satırla ilgili bir sorun yaşamaya başladım.

O satırı sildim, ardından EOF mesajını aldım.


4

@ Simon'un cevabı Python 2'de en çok yardımcı olurken raw_input, Python 3'te mevcut değildir. Kodunuzun Python 2 ve Python 3'te eşit derecede iyi çalıştığından emin olmak için aşağıdakileri yapmanızı öneririm:

İlk olarak, gelecekteki pip kurulumunu yapın:

$ pip install future

İkincisi: Future.builtins'ten girişi içe aktarın

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

Ve yukarıda listelenen belirli örnek için:

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

4

Python 2 ve 3 uyumluluğunu elde etmek için aşağıdaki kodu kullanıyorum

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

3

Genel olarak cevaplamaya çalışıyorum, bu soruyla ilgili değil, bu hata genellikle bir sözdizimini ikiye böldüğünüzde ve diğer yarısını unuttuğunuzda ortaya çıkıyor. Benim durumumda olduğu gibi:

try :
 ....

python aradığından beri

except Exception as e:
 ....

ancak bir EOF (Dosya Sonu) ile karşılaştı, dolayısıyla hata. Kodunuzda eksik sözdizimi bulup bulamadığınıza bakın.


1

Ben de aynı şeye rastladım ve sorunun ne olduğunu anladım. Yöntem girdisini kullandığımızda, yazmamız gereken yanıt çift tırnak içinde olmalıdır. Senin çizgindeki gibi date=input("Example: March 21 | What is the date? ")

Konsolda "12/12/2015" istendiğinde yazmalısınız - "öncesini ve sonrasını not edin . Bu şekilde, bunu bir dizge olarak alacak ve beklendiği gibi işleyecektir. Bunun bu inputyöntemin sınırlaması olup olmadığından emin değilim - ama bu şekilde çalışıyor.

Umarım yardımcı olur


1

İlk if ifadesinden sonra "if" yazmak yerine "elif" yazın ve sonra çalışmalıdır.

Örn.

`    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

Deneyebileceğiniz şey, kodunuzu normal inputkomutu kullanarak python için normal şekilde yazmaktır. Ancak işin püf noktası komutu programlamanın başlangıcına eklemektir input=raw_input.

Şimdi yapmanız gereken tek şey Python / IDLE veya Terminal'de çalışmanıza bağlı olarak devre dışı bırakmak (veya etkinleştirmek). Bunu, gerektiğinde "#" ekleyerek yaparsınız.

Python / IDLE'de kullanım için kapatıldı

    #input=raw_input 

Ve tabii ki terminalde kullanım için açıldı.

    input=raw_input 

Her zaman işe yarayıp yaramayacağından emin değilim, ancak basit programlar veya komut dosyaları için olası bir çözüm.


0

Derleyicinizin sürümünü kontrol edin.

  1. Python2 ile uğraşıyorsanız, şunu kullanın -

n= raw_input("Enter your Input: ")

  1. python3 kullanımı ile uğraşıyorsanız -

n= input("Enter your Input: ")


-2

İşlevlerin tüm parametrelerinin çağrılmadan önce tanımlanıp tanımlanmadığını kontrol edin . Kaggle'ı uygularken bu problemle karşılaştım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.