Pythonの「予期しないインデント」エラーを修正するにはどうすればよいですか?
Pythonの「予期しないインデント」エラーを修正するにはどうすればよいですか?
回答:
Pythonは、行の先頭の間隔を使用して、コードブロックの開始と終了を決定します。取得できるエラーは次のとおりです。
予期しないインデント。このコード行の先頭には前よりも多くのスペースがありますが、前の1つはサブブロックの開始ではありません(たとえば、if / while / forステートメント)。ブロック内のすべてのコード行は、まったく同じ空白文字列で始まる必要があります。例えば:
>>> def a():
... print "foo"
... print "bar"
IndentationError: unexpected indent
これは、Pythonをインタラクティブに実行する場合に特に一般的です。コマンドの前に余分なスペースを入れないでください。(サンプルコードをコピーして貼り付けると非常に煩わしい!)
>>> print "hello"
IndentationError: unexpected indent
インデント解除は、外側のインデントレベルと一致しません。このコード行の最初のスペースは前のものよりも少ないですが、同様に、それが含まれる可能性のある他のどのブロックとも一致しません。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」コマンドパスを使用します。
>>> def foo():
... pass
タブとスペースの混在は許可されていますが(少なくとも私のバージョンのPythonでは)、Pythonはタブが8文字であることを想定しているため、エディターと一致しない場合があります。タブに「いいえ」と言うだけです。ほとんどのエディターでは、スペースで自動的に置き換えることができます。
これらの問題を回避する最良の方法は、サブブロックをインデントするときに常に一定数のスペースを使用することであり、理想的には問題を解決する優れたIDEを使用することです。これにより、コードが読みやすくなります。
Pythonでは、間隔が非常に重要です。これにより、コードブロックの構造が決まります。このエラーは、次のようにコード構造をめちゃくちゃにすると発生します。
def test_function() :
if 5 > 3 :
print "hello"
ファイル内にタブとスペースが混在している場合もあります。
PyScripterやNetbeansなどのpython構文認識エディタを使用することをお勧めします
使用しているエディタで空白の表示をオンにし、タブをスペースに置き換えるをオンにします。
Pythonでタブとスペースを組み合わせてタブを使用することはできますが、通常は発生しているエラーが発生します。4つのスペースでタブを置き換えることは、Pythonコードを書くための推奨アプローチです。
Sublimeを使用してPythonを記述していて、インデントエラーが発生している場合は、
表示->インデント->インデントをスペースに変換
私が説明している問題は、Sublimeテキストエディタが原因です。同じ問題が他の編集者によっても引き起こされる可能性があります。基本的に、この問題は、スペースの観点からインデントを処理したいPythonと、タブの観点からインデントをコーディングするさまざまなエディターとの関係に関係しています。
このエラーは、何かをPythonインタープリター(ターミナル/コンソール)に貼り付けるときにも発生する可能性があります。
インタプリタは空行を式の終わりとして解釈することに注意してください。
def my_function():
x = 3
y = 7
インタプリタは、前の空の行をy = 7
式の終わり、つまり関数の定義が完了したことを解釈します。次の行y = 7
は、新しい式であるため、インデントが正しくありません。
インデントが問題ない場合は、エディタに「空白の表示」オプションがあるかどうかを確認してください。これを有効にすると、スペースとタブが混在している場所を見つけることができます。
単にあなたのスクリプトをコピーして、 "" "の下にあなたのコード全体を挿入してください" "" ...
この行を変数で指定します。
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..
ctrl + bを使用してSublimeエディターでこのコードを実行すると、インデントされたコードがコンソールに出力されます。それでおしまい
次のコマンドを実行して解決します。
autopep8 -i <filename>.py
これによりコードが更新され、すべてのインデントエラーが解決されます:)
これが解決することを願っています
Pythonのインデントは重要であり、他の多くのプログラミング言語とは異なり、これは単にコードを読みやすくするためではありません。連続するコマンドの間にコード内に空白またはタブがある場合、Pythonはこれに敏感であるため、Pythonはこのエラーを出します。コードをコピーして任意のPythonに貼り付けると、このエラーが発生する可能性があります。 Notepad ++などのテキストエディタを使用してこれらのスペースを識別して削除するか、エラーが発生しているコード行から手動で空白を削除してください。
Step1 :Gives error
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
Step2: L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]print(L[2: ])
Step3: No error after space was removed
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
OUTPUT: [[7, 8, 9, 10]]
ありがとう!