Soru Python 3: Bir satırı okurken EOF (Sublime Text 2 öfkeli)


while True:
    reply = input('Enter text')
    if reply == 'stop': break
    print(reply.upper())

Sonuç oldu:

Enter text:Traceback (most recent call last):
  File "C:\PythonProjects\5.py", line 2, in <module>
    reply = input('Enter text:')
EOFError: EOF when reading a line
[Finished in 0.2s with exit code 1]

Sadece Sublime Text 2'de. IDLE denedim, komut satırını denedim, her şey mükemmel. Subleme neden bana bağırmalı?

Bu arada belki de EOF'un böyle bir durumda ne demek olabileceğini açıklayabilirsin. Tabii ki, belgelerde okudum, eğer EOF girişten okunduğunda, uygun hata ortaya çıkar. Bu durumu modellemek istiyorum. Giriş sadece klavye hakkında mı? Varsa, EOF almak için hangi tuş kombinasyonlarını girmeliyim?

Şimdiden teşekkür ederim.


32
2017-09-22 21:02


Menşei


Sorunuzun geri kalanından emin değil, ancak EOF genellikle ctrl + D - AGS


Cevaplar:


Bende aynı problem vardı. Sublime Text'in varsayılan konsolu ile ilgili problem, girişi desteklememesidir.

Bunu çözmek için SublimeREPL adında bir paket kurmalısınız. SublimeREPL, girişi kabul eden bir Python yorumlayıcısı sağlar.

Bir var makale Bu, çözümü ayrıntılı olarak açıklıyor.

SublimeREPL için GitHub sayfası


33
2018-03-14 18:49



Makaleye bağlantı artık çalışmıyor, bence bunu kontrol etmelisiniz - MAZux


EOF, girişin sonu anlamına gelen özel bant dışı bir sinyaldir. Bu bir karakter değil (eski DOS günlerinde, 0x1B EOF gibi davranıyordu), ancak OS'den girdinin sona erdiği bir sinyal.

Windows'da, bir EOF tuşuna basarak "girebilirsiniz". Ctrl+Z komut isteminde. Bu, terminalin çalışan programa bir EOF sunan giriş akışını kapatması sinyalini verir. Diğer işletim sistemlerinde veya terminal emülatörlerinde, EOF'nin genellikle Ctrl+D.

Sublime Text 2 ile ilgili sorununuza gelince, öyle görünüyor ki stdin Sublime içinde bir program çalıştırırken terminale bağlı değildir ve sonuç olarak programlar boş bir dosyaya bağlanır (muhtemelen nul veya /dev/null). Ayrıca bakınız Python 3.1 ve Sublime Text 2 hatası.


10
2017-09-23 01:15



Terminale girebilmek için stdin'i doğru şekilde bağlamanın bir yolu var mı? - TheTedinator
Ben kişisel olarak Sublime kullanmıyorum, ancak öneriyi yüklemek için önermek SublimeREPL. - nneonneo


help(input) hangi klavye kısayollarının EOF'yi, yani Unix'i ürettiğini gösterir: Ctrl-D, Windows: Ctrl-Z + Return:

giriş ([komut]) -> dize

Standart girişten bir dize okuyun. Sondaki satır soyuldu.   Kullanıcı EOF'a isabet ederse (Unix: Ctl-D, Windows: Ctl-Z + Return), yükselt   EOFError. Unix'te, etkinleştirilmişse GNU readline kullanılır. Bilgi istemi   Belirtilen dizge, daha önce son satır olmadan yazdırılır   okuma.

Boş bir dosya kullanarak yeniden oluşturabilirsiniz:

$ touch empty
$ python3 -c "input()" < empty
Traceback (most recent call last):
  File "<string>", line 1, in <module>
EOFError: EOF when reading a line

Kullanabilirsin /dev/null veya nul (Windows) okumak için boş bir dosya olarak. os.devnull İşletim Sisteminiz tarafından kullanılan adı gösterir:

$ python3 -c "import os; print(os.devnull)"
/dev/null

Not: input() bir dosya / borudan girişi kabul eder. İhtiyacın yok stdin terminale bağlanmak için:

$ echo abc | python3 -c "print(input()[::-1])"
cba

Ya kolu EOFError kodunda:

try:
    reply = input('Enter text')
except EOFError:
    break

Veya editörünüzü komut dosyası çalıştırdığında boş olmayan bir girdi sağlamak için yapılandırın, eğer izin veriyorsa özelleştirilmiş bir komut satırı kullanarak: python3 "%f" < input_file


9
2017-09-23 04:19





Şimdi olduğu gibi, tek çözüm hala SublimeREPL'yi kurmaktır.

Raghav'un ​​cevabını genişletmek için, her zaman giriş ile bir komut dosyası çalıştırmak istediğinizde Tools-> SublimeREPL-> Python-> Çalıştır komutuna gitmek zorunda kalmak oldukça can sıkıcı olabilir, bu yüzden kullanışlı olabilecek bir hızlı anahtar bağladım :

Bunu etkinleştirmek için Tercihler-> Tuş Bağlantıları - Kullanıcı'ya gidin ve bunu kopyalayın:

[
    {"keys":["ctrl+r"] , 
    "caption": "SublimeREPL: Python - RUN current file",
    "command": "run_existing_window_command", 
    "args":
        {
            "id": "repl_python_run",
            "file": "config/Python/Main.sublime-menu"
        }
    },
]

Doğal olarak, kısayolu değiştirmek istediğinizi değiştirmek için "tuşlar" argümanını değiştirmeniz gerekir.


5
2018-04-21 21:24





try:
    value = raw_input()
    do_stuff(value) # next line was found 
except (EOFError):
   break #end of file reached

Bu, boru girişindeki giriş akımının sonu ile uğraşırken raw_input öğesinin doğru kullanımı gibi görünüyor. [Bu gönderiyi oku] [1]


-2
2017-10-03 10:13