解析中のPythonの予期しないEOF


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はターゲット変数内のオブジェクトのタイプを認識し、生成される可能性のあるさまざまな例外が発生します。あなたがする必要がありますので 、NOTを使用inputしますが、一時的なテストのために何かを入れている場合を除き、唯一のPythonの表現について少し知っている人が使用します。

raw_input常に文字列を返すのは、それが常に入力するものだからです...しかし、それを必要な特定の型に簡単に変換して、発生する可能性のある特定の例外をキャッチできます。うまくいけば、その説明があれば、どちらを使用すべきかを知るのは簡単です。

参照

注:これはPython 2専用です。Python3の場合、raw_input()プレーンにinput()なり、Python2input()は削除されました。


それは私のために働いた!しかし、私は私が...のPython 3をインストールしているにもかかわらず、私のLinuxのミント18.3のインストールは、Python 2走る理由としてわからない
Bajiru

1
Mint 18.3(およびそれが基づいているUbuntu Xenial)/usr/bin/pythonでは、Python 2実行可能ファイルであり、Python3/usr/bin/python3実行可能ファイルです。Mint 19では、システムのデフォルトのpythonはpython3だと思います。
simon 2018

16

インデントしてください!最初。それはあなたの世話をするでしょうSyntaxError

それとは別に、プログラムには他にもいくつか問題があります。

  • raw_input文字列を入力として受け入れる場合に使用します。inputPython式のみを取り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":

    ....

さて、それは構文エラーのためでした。他の間違いを編集しましょう。
セントヒルクマラン2011

1
ループの本体はインデントされています。インデントは、Pythonがステートメントをグループ化する方法です。インタラクティブプロンプトで、インデントされた行ごとにタブまたはスペースを入力する必要があります。
Jeremy A. West

6

行の閉じ括弧がないため、このエラーが発生しました。

invalid syntax (<string>, line ...)? スクリプトの最後に次のような行で問題が発生し始めました 。

その行を削除してから、EOFメッセージを受け取りました。


4

@simonの答えはPython2で最も役立ちますが、Python 3にraw_inputはありません。コードがPython2とPython3で同等に機能することを確認するには、次のことをお勧めします。

まず、pip installfuture:

$ pip install future

2番目: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? ")

4

私はPython2と3の互換性を得るために次のコードを使用しています

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

3

私は一般的に答えようとしていますが、この質問とは関係ありません。このエラーは通常、構文を半分に分割して残りの半分を忘れたときに発生します。私の場合のようにそれは:

try :
 ....

Pythonが検索していたので

except Exception as e:
 ....

しかし、EOF(End Of File)が発生したため、エラーが発生しました。コード内に不完全な構文がないかどうかを確認してください。


1

私は同じことに出くわし、何が問題なのかを理解しました。メソッドinputを使用する場合、入力する必要のある応答は二重引用符で囲む必要があります。あなたのラインのように date=input("Example: March 21 | What is the date? ")

コンソール「12/12/2015」でプロンプトが表示されたら入力する必要があります-"前後のことをメモしてください。このようにして、それを文字列として受け取り、期待どおりに処理します。これがこのinput方法の制限であるかどうかはわかりませんが、このように機能します。

それが役に立てば幸い


1

「if」と入力する代わりに最初のifステートメントの後に「elif」と入力すると、機能するはずです。

`    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

あなたが試すことができるのは、通常のinputコマンドを使用して、Pythonの通常のコードを書くことです。ただし、コツは、プログラムの最初にコマンドを追加することですinput=raw_input

Python / IDLEとターミナルのどちらで実行しているかに応じて、無効にする(または有効にする)だけです。これを行うには、必要に応じて「#」を追加するだけです。

Python / IDLEで使用するためにオフに切り替えられました

    #input=raw_input 

そしてもちろん、ターミナルで使用するためにスイッチを入れました。

    input=raw_input 

それが常に機能するかどうかはわかりませんが、単純なプログラムやスクリプトの可能な解決策です。


-2

関数を呼び出す前に、関数のすべてのパラメーター定義されているかどうかを確認してください。Kaggleの練習中にこの問題に直面しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.