web-dev-qa-db-ja.com

Python予期しないEOF解析中

これが私の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
>>> 
72
Web_Designer

inputname__の代わりにraw_inputを使用します:)

inputname__を使用する場合、入力したデータはPython Expressionとして解釈されます。これは、gawdがターゲット変数のオブジェクトのタイプを知っていることを意味します。生成される可能性のある広範な例外のしたがって、ではなく、inputname__を使用する必要があります。一時テスト用に何かを入れている場合は、Python式について少し知っている人だけが使用します。

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

参照

注:これはPython 2のみです。Python 3の場合、raw_input()input()になり、Python 2 input()は削除されました。

103
simon

インデント!最初。これでSyntaxErrorが処理されます。

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

  • 入力として文字列を受け入れる場合は、raw_inputを使用します。 inputはPython式のみを取り、それらに対してevalを実行します。

  • のような特定の8ビット文字をスクリプトで使用しています。一般的にコーディングCookieと呼ばれる# -*- coding:latin-1 -*-行を使用して、スクリプトの上部でエンコードを定義する必要がある場合があります。

  • また、str比較を行いながら、文字列を正規化して比較します。 (lower()itを使用している人)これは、ユーザー入力にほとんど柔軟性を与えないようにします。

  • Pythonチュートリアルを読むことも役立つと思います。 :)

サンプルコード

#-*- coding: latin1 -*-

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

    ....
14
Senthil Kumaran

@simonの答えはPython 2で最も役に立ちますが、Python 3にはraw_inputは存在しません。3. Python 2およびPython 3:

最初に、pip install future:

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

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

私は、スクリプトの最後に「invalid syntax (<string>, line ...)?」という行で問題が発生し始めました。

その行を削除すると、EOFメッセージが表示されました。

3
JGFMK

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

try :
 ....

pythonは

except Exception as e:
 ....

しかし、EOF(ファイルの終わり)が発生したため、エラーが発生しました。コードで不完全な構文を見つけることができるかどうかを確認してください。

3
Priyank Pathak

次のコードを使用して、Python 2および3の互換性を取得しています

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

最初の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 `
1
Climberirw

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

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

それが役に立てば幸い

1
user3607430

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

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

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

    #input=raw_input 

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

    input=raw_input 

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

0
joesh