155

Pythonで「予期しないインデント」エラーを修正するにはどうすればよいですか?

4

18 に答える 18

160

Python は、行頭のスペースを使用して、コード ブロックの開始と終了のタイミングを決定します。発生する可能性のあるエラーは次のとおりです。

予期しないインデント。このコード行は前のものよりも先頭に多くのスペースがありますが、前のものはサブブロックの開始ではありません (例: if/while/for ステートメント)。ブロック内のすべてのコード行は、まったく同じ文字列の空白で始まる必要があります。例えば:

>>> def a():
...   print "foo"
...     print "bar"
IndentationError: unexpected indent

これは、python をインタラクティブに実行する場合に特に一般的です。コマンドの前に余分なスペースを入れないようにしてください。(サンプル コードをコピー アンド ペーストするときは非常に面倒です!)

>>>   print "hello"
IndentationError: unexpected indent

Unindent は、どの外側のインデント レベルとも一致しません。このコード行は、前のコード行よりも先頭のスペースが少なくなっていますが、同様に、それが含まれる可能性のある他のブロックとは一致しません。Python はそれがどこに行くのかを決めることができません。たとえば、次の場合、最終的な出力は if 句の一部になるはずですか?

>>> if user == "Joey":
...     print "Super secret powers enabled!"
...   print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level

インデントされたブロックが必要です。このコード行には、前の行と同じ数のスペースが先頭に含まれていますが、最後の行はブロック (if/while/for ステートメント、関数定義など) を開始することが予期されていました。

>>> def foo():
... print "Bar"
IndentationError: expected an indented block

何もしない関数が必要な場合は、「no-op」コマンドpass を使用します。

>>> def foo():
...     pass

タブとスペースの混在は許可されていますが (少なくとも私のバージョンの Python では)、Python はタブの長さが 8 文字であると想定しているため、エディターと一致しない場合があります。タブに「いいえ」と言うだけです。ほとんどのエディターでは、スペースを自動的に置き換えることができます。

これらの問題を回避する最善の方法は、サブブロックをインデントするときに常に一貫した数のスペースを使用し、理想的には問題を解決する優れた IDE を使用することです。これにより、コードが読みやすくなります。

于 2009-06-19T11:03:01.273 に答える
24

Python では、間隔が非常に重要です。これにより、コード ブロックの構造が決まります。このエラーは、次のようにコード構造を台無しにすると発生します。

def test_function() :
   if 5 > 3 :
   print "hello"

ファイルにタブとスペースが混在している場合もあります。

PyScripterNetbeansなどの Python 構文対応エディターを使用することをお勧めします。

于 2009-06-19T08:00:08.227 に答える
22

-tt オプションを指定してコードを実行し、タブとスペースの使用に一貫性がないかどうかを確認します

于 2011-09-21T11:31:51.487 に答える
20

使用しているエディターで表示される空白をオンにし、タブをスペースに置き換えるをオンにします。

Pythonでタブを使用することはできますが、タブとスペースを混在させると、通常、発生しているエラーが発生します。タブを4つのスペースに置き換えることは、Pythonコードを作成するための推奨されるアプローチです。

于 2009-06-19T11:25:47.843 に答える
11

正しいインデントを使用する。Python は空白を認識しているため、ブロックのインデント ガイドラインに従う必要があります。そうしないと、インデント エラーが発生します。

于 2009-06-19T07:58:22.753 に答える
7

Sublime を使用して Python を作成していて、インデント エラーが発生した場合は、

ビュー -> インデント -> インデントをスペースに変換

私が説明している問題は、Sublime テキスト エディターが原因です。同じ問題は、他のエディターによっても発生する可能性があります。基本的に、この問題は、インデントをスペースで処理したい Python と、インデントをタブでコーディングしているさまざまなエディターに関係しています。

于 2017-03-14T22:25:42.517 に答える
5

エディターで「タブの代わりにスペースを挿入する」オプションを使用していることを確認してください。次に、たとえば 4 のタブ幅を選択できます。これらのオプションは、gedit の edit-->preferences-->editor の下にあります。

結論:タブではなくスペースを使用してください

于 2013-09-16T14:33:24.257 に答える
3

いつも私のために働いたトリックがあります:

予期しないインデントが発生し、すべてのコードが完全にインデントされていることがわかった場合は、別のエディターで開いてみてください。インデントされていないコード行が表示されます。

vim、gedit、またはそのようなエディターを使用したときに、それは私に起こりました。

コードには1つのエディターのみを使用するようにしてください。

于 2009-06-19T11:21:56.823 に答える
3

スクリプトをコピーして、「」の下にコード全体を配置するだけです「」...

この行を変数で指定します..のように、

a = """ your python script """
print a.replace('here please press tab button it will insert some space"," here simply press space bar four times")
# here we replacing tab space by four char space as per pep 8 style guide..

Sublime Editor で ctrl+b を使用してこのコードを実行すると、インデントされたコードがコンソールに出力されます。それでおしまい

于 2016-02-11T12:40:59.600 に答える
3

インデントに問題がないように見える場合は、エディタに「空白を表示」オプションがあるかどうかを確認してください。これを有効にすると、スペースとタブが混在している場所を見つけることができます。

于 2009-06-19T11:15:26.460 に答える
2

Notepad++ は正しいタブ スペースを提供していましたが、最終的に Sublime テキスト エディターでインデントの問題が見つかりました。

Sublime テキスト エディターを使用して、1 行ずつ移動します

于 2014-09-17T23:38:25.763 に答える