4

私はPythonの初心者で、Pythonを使用してNLPに取り組んでいます。Pythonでif-elseブロックを書くときにエラーが発生しました。その時点でifブロックのみを記述している場合、正常に機能しています。

if xyzzy.endswith('l'):
    print xyzzy

コロン(:)を入力した後、を押すEnterと、自動的に正しいインデントに移動します。

しかし、printステートメントの後にキーを押した後にelseブロックを追加しようとすると、 IFブロックのみEnterのステートメントと見なされるため、 elseブロックが必要なため、誤ったインデントが発生します。私が自分自身をブロックする他の方法を書き込もうとすると、このエラーが発生します。

else:
   ^

IndentationError: unexpected indent

印刷ステートメントを書いた後はどうすればよいですか?Enterカーソルを前方に移動しているため、明らかに機能していませんがspace、正しいポインタに到達するために使用すると、エラーが発生します。

4

7 に答える 7

7

あなたの投稿から問題が何であるかを知るのは難しいですが、if-elseはそのようにフォーマットされています

 if someCondition:
     do_something       # could be a single statement, or a series of statements
 else:
     do_something_else  # could be a single statement, or a series of statements

つまり、対応すると同じレベルelseである必要があります。if

に関するこのPythonのドキュメント/チュートリアルif、およびこの他のチュートリアルも参照してください。

エディターが自動インデントを実行し、手動で編集する場合も、混乱する可能性があるため、エディターがインデントをどのように処理するかを理解する必要があります(たとえば、常にtabsまたはスペースを使用していますか?、リターンキーを押すとどうなりますか?など)。

また、タブとスペースの混合にも注意してください。これも問題の原因になります(どちらも「見えない」ため、見つけるのは困難です)。

更新された投稿で:

   if xyzzy.endswith('l'):
       print xyzzy
   else:
       something_else
于 2012-09-04T15:52:42.677 に答える
2

は、結合されているとelse同じレベルのインデントである必要があります。if

if x:
    # Do something
else:
    # Do something else

あなたの場合、

if xyzzy.endswith('l'):
    print xyzzy
else:
    # Something else

エディターが自動インデントしている場合でも、コードを構文的に正しくするためにインデントを解除する必要があります。

于 2012-09-04T15:53:18.863 に答える
2

インデントを正しく取得することは、実際にはPythonの問題ではなく、ソースコードに使用しているエディターの問題です。

Pythonを理解しているほとんどのエディターは、コロンの後に1レベルのインデントを正しく追加します(ご覧のとおり)。そのコードブロックには必要な数のステートメントを含めることができるため、エディターには、の次の行をいつ「アウトデント」するかを知る方法がありませんelse

入力を開始する前に、行でバックスペースまたはShift+を押して、その行をアウトデントするようにエディターに指示する必要があります。Tab

コードの残りの部分が記述された後に部分を挿入する場合は、インデントに使用する文字がステートメントelseの場合と同じであることを絶対に確認してください。ifステートメントがスペースでインデントされている場合はif、と同じ数のスペースを使用しますelse。ステートメントが1つ以上のタブでインデントされている場合は、ifステートメントに同じ数のタブを使用しますelse。インデントのためにスペースとタブを混在させないでください。

行が同じようにインデントされているように「見える」からといって、同じようにインデントされていると思い込まないでください。1つはスペースを使用し、もう1つはタブ(またはいくつかの組み合わせ)を使用する場合があります。

于 2012-09-04T15:58:46.953 に答える
1

スペースを使用して正しいポインタに到達すると、エラーが発生します

もちろん。スペースを使用しても「改行」は発生しません。通常、これはUnixシステムでは\nです。.pyファイルを別のエディター(Windowsのメモ帳など)で開くと、elseステートメントがprintと同じ行にあることがわかります。

Enterカーソルを前方に移動しているため、明らかに機能していません

正しい回数バックスペースキーを押すと、 IFステートメントと同じレベルのインデントになります。

于 2014-06-16T14:25:54.597 に答える
1

私は受け入れられた答えに完全には同意しません。はい、Pythonではインデントは非常に重要ですがif-else、このフォーマットでは常にそのように見える必要があることを述べるのは少しやり過ぎです。

ifPythonでは、elifまたはの本体にインデントを必要とするような凝ったことを何もしない限り、ワンライナー(複数でも)を使用できますelse

ここではいくつかの例を示します。

choice = 1
# if with one-liner
if choice == 1: print('This is choice 1')

# if-else with one-liners
if choice == 1: print('This is choice 1')
else: print('This is a choice other than 1')

# if-else if with one-liners
if choice == 1: print('This is choice 1')
elif choice == 2: print('This is choice 2')

# if-else if-else with one-liners
if choice == 1: print('This is choice 1')
elif choice == 2: print('This is choice 2')
else: print('This is a choice other than 1 and 2')

# Multiple simple statements on a single line have to be separated by a semicolumn (;) except for the last one on the line
if choice == 1: print('First statement'); print('Second statement'); print('Third statement')

通常、Pythonの大きな機能の1つであるコードの可読性が失われるため、1行に多くのステートメントをパックすることはお勧めしません。

上記の例は、とにも簡単に適用できることにも注意してforくださいwhile三元条件演算子を使用すると、ワンライナーifブロックのクレイジーなネストを行うことができます。

オペレーターの通常の外観は次のとおりです。

flag = True
print('Flag is set to %s' % ('AWESOME' if True else 'BORING'))

基本的に、それは簡単なif-elseステートメントを作成します。より多くの分岐が必要な場合は、ワンライナーの1つに埋め込むことができます(ただし、複雑な分岐は必要ありません)。

これにより、状況が少し明確になり、何が許可され、何が許可されないかが明確になることを願っています。;)

于 2016-01-18T14:14:10.467 に答える
0

インデントが正しく見えても、このエラーが発生します。

Notepad ++で表示すると、空白とタブを表示するオプションがあります。このエラーは、スペースとタブを組み合わせてインデントを作成したことが原因で発生しました。すべての行でタブをスペースに置き換えると、エラーを取り除くのに役立ちました。

于 2014-11-10T21:37:42.863 に答える
0

実際、これはPython IDLE UIの問題です。ifブロックが終了した後にヒットすると、次のEnterelseステートメントはすでにifステートメントを意図しています。インデントを作成するためにタブやスペースを提供する必要はありません。以下は参考画像です。

ここに画像の説明を入力してください

于 2019-01-16T10:36:26.863 に答える