2010-11-24 25 views
6

シンプルなコードを使用して、エラーの原因を理解できません。パーサーは5行目の予期しないインデント(if文)で私を吠えています。誰もがここで問題を見ていますか?私はしません。Pythonで予期しないインデントエラーが発生する

def gen_fibs(): 
    a, b = 0, 1 
    while True: 
     a, b = b, a + b 
     if len(str(a)) == 1000: 
      return a 

答えて

12

コードをコピーして貼り付けただけの場合は、ifステートメントの行にタブを使用しました。 Pythonはタブを8つのスペースで解釈しますが、4ではなくタブを解釈します。

1または少なくともタブとスペースは混用しないでください。 Pythonの宇宙の残りの部分と一貫性を持たせるために、4つのスペースを使用することを強くお勧めします。

+0

ああ!私はこのコードを他のコードからコピーして貼り付けました。良い悲しみ。私は上記の答えにコメントしましたが、あなたの答えまで何が起こったのか分かりませんでした。ありがとう! – tjsimmons

+0

なぜこれが下降表示されたのですか? – aaronasterling

+1

今は0に戻る;)私は同じことをやろうとしていました。検索を実行して '\ t'文字を置き換え、' [four spaces] 'に置き換えることをお勧めします。 – Blender

1

チェックそのまま貼り付けたコードがすべてのエラーを生成しませんので、あなたは、スペースか何かでタブを混合されていない場合。

+1

これはそれでした。 MacでTextMateを使用してコードを書いて、タブキーを押してインデントします(4つのスペースに配置されます)。エディタではうまく見えましたが、ここに貼り付けたときにif文に余分なタブがありました。私はそれを手動の4つのスペースに切り替え、それは働いた。奇妙な。 – tjsimmons

+1

TextMateは常に.pyファイル内のスペースを使用するように設定できます。 –

1

a, b = b, a + bの行は8つのスペースでインデントされ、ifの行は4つのスペースとタブでインデントされます。今までタブを挿入しないようにエディタを設定します。

(Pythonは8つのスペースもするタブを考えて、それはそれらを使用するだけでなく、簡単です)

4

あなたは、タブとスペースを混合しています。タブはで、常にはインデントの目的で8つのスペースと同じと見なされます。検証するためにpython -ttでスクリプトを実行します。

-1

すべての行の前にある空白が正しく入力されているかどうかを確認してください。スペースの代わりにタブをタイプしてもかまいません。すべてのスペースを削除して、タブまたはスペースのみを使用するように変更してみてください。

関連する問題