729

以下のPythonコードをコンパイルすると、次のようになります。

IndentationError:unindentはどの外部インデントレベルとも一致しません


import sys

def Factorial(n): # Return factorial
    result = 1
    for i in range (1,n):
        result = result * i
    print "factorial is ",result
    return result

なんで?

4

37 に答える 37

811

他のポスターはおそらく正しいです...あなたのタブと混ざっているスペースがあるかもしれません。検索と置換を実行して、すべてのタブをいくつかのスペースに置き換えてみてください。

これを試して:

import sys

def Factorial(n): # return factorial
    result = 1
    for i in range (1,n):
        result = result * i
    print "factorial is ",result
    return result

print Factorial(10)
于 2009-01-29T16:37:18.510 に答える
319

重要: スペースを使用することをお勧めします - PEP 8インデントタブまたはスペースを参照してください。. (これについては@Sihaに感謝します。)

Sublime Textユーザーの場合:

インデントにタブを使用するように Sublime Textを設定します: [表示] --> [インデント] -- > [インデントをタブに変換]

上記の同じサブメニューで、[スペースを使用してインデント] オプションもオフにします。これにより、この問題はすぐに解決されます。

于 2014-05-08T11:44:49.773 に答える
150

タブ/スペースの問題を簡単に確認するには、実際にこれを行うことができます:

python -m tabnanny yourfile.py

または、もちろんエディタを正しく設定することもできます:-)

于 2009-02-04T21:50:28.420 に答える
48

インデントの空白にタブとスペースが混在していませんか? (そのエラーの原因になります。)

Python コードではタブを使用しないことをお勧めします。スタイル ガイドを参照してください。タブにスペースを挿入するように Notepad++ を構成する必要があります。

于 2009-01-29T16:41:15.240 に答える
28

このエラーが発生するたびに、エディターでタブとスペースを混同したことが原因です。

于 2009-01-29T16:45:19.430 に答える
18

Vim を使用している場合は、エスケープを押してから入力します

gg=G

これはすべてを自動的にインデントし、挿入したスペースをクリアします。

于 2015-05-07T09:43:20.837 に答える
11

行:result = result * iはインデントする必要があります(これはforループの本体です)。

または-スペースとタブ文字が混在しています

于 2009-01-29T16:38:04.560 に答える
10

Spyder ユーザー の場合は、 [ソース] > [インデント を修正] に移動して、問題をすぐに修正してください。

于 2020-01-05T16:56:55.533 に答える
8

notepad++ を使用している場合は、拡張検索モードで「置換」を実行して \t を検索し、4 つのスペースに置き換えます。

于 2014-03-20T17:23:01.500 に答える
7

インデントの問題のようです。Python の中括弧を一致させる必要はありませんが、インデントレベルを一致させる必要があります。

スペース/タブの問題を回避する最善の方法は、テキスト エディター内で非表示の文字を表示することです。これにより、インデント関連のエラーを防止および/または解決する簡単な方法が得られます。

また、コピーして貼り付けたコードを挿入することも、この種の問題の一般的な原因です。

于 2012-07-31T20:27:51.850 に答える
2

その上の関数が同じようにインデントされていないことが原因である可能性があります。すなわち

class a:
    def blah:
      print("Hello world")
    def blah1:
      print("Hello world")
于 2014-02-14T02:52:13.967 に答える
2

Atomユーザーの場合、Packages ->whitspace -> remove trailing whitespaces これはうまくいきました

于 2015-07-28T12:41:15.563 に答える
1

これは、タブとスペースの両方が混在しているためです。すべてのスペースを削除してタブに置き換えることができます。

または、これを書いてみてください:

#!/usr/bin/python -tt

コードの先頭に。この行は、タブとスペースの違いを解決します。

于 2014-03-05T13:43:15.200 に答える
1

まず、論理エラーがあることを思い出してください。result=1 を維持することをお勧めします。そうしないと、ループが実行された後でも出力が result=0 になります。

第二に、次のように書くことができます:

import sys

def Factorial(n): # Return factorial
  result = 0
  for i in range (1,n):
     result = result * i

  print "factorial is ",result
  return result

行を残すと、FOR ステートメントが終了したことが Python シェルに通知されます。Python シェルを使用した経験がある場合は、行を残す必要がある理由を理解できます。

于 2018-12-25T11:49:39.063 に答える
1

昨日同じ問題が発生しました。インデントエラーで、崇高なテキストエディターを使用していました。修正に何時間も費やし、最終的にコードを VI テキスト エディタにコピーしたところ、問題なく動作しました。ps python は空白に敏感すぎるため、スペースとタブを混在させないようにしてください。

于 2014-06-26T15:57:37.433 に答える
1

コードにタブがなくてもこのエラーが発生しました。その理由は、コードのどこかに余分な閉じ括弧があったためです。等号の前後のスペースを台無しにしていたため、これをもっと早く理解する必要がありました... Reformat codeIDE で実行した後 (または手動で autopep8 を実行した後) に何か問題が見つかった場合は、すべての括弧が一致していることを確認してください。最初の等号の前後の奇妙なスペース。

于 2020-07-24T07:52:41.453 に答える
0

Python 開発に Sublime text を使用している場合は、パッケージ Anaconda を使用することでエラーを回避できます。Anaconda をインストールした後、

  1. あなたのファイルを崇高に開きます
  2. 空きスペースを右クリック
  3. アナコンダを選ぶ
  4. オートフォーマットをクリック
  5. 完了 または CTRL+ALT+R を押します。
于 2015-01-28T07:18:27.623 に答える
0

今日この問題に遭遇しましたが、私が犯した間違いがリストされていなかったので、それを追加しようと思いました-そして、おそらく他の誰かを数時間節約するでしょう:)

関数で改行を使用していますが、この場合、空白行が適切にインデントされていません。これにより、Python はこのエラーをスローして終了しました。

于 2021-11-17T15:20:22.107 に答える
0

私の場合、問題はEclipseでのpydevの構成でした

pydev@エクリプス

于 2014-03-08T11:13:10.263 に答える