これがIndentationError
jramirez の回答の修正ではなく、実際のである場合は、ステートメントの前SyntaxError
の行に問題がある可能性があります。if
Python では、式が括弧内にある限り、複数の行にわたって式を続けることができます。)
そのため、関数呼び出しやタプルなどの末尾で誤って aを省略した場合SyntaxError
、次の行で謎のエラーが発生することがよくあります。たとえば、次のコード:
foo = (1, 2
if a == 2:
pass
…このエラーが発生します:
if a == 2:
^
SyntaxError: invalid syntax
そして、別のコンマを追加するだけで、エラーが別の場所に移動します!
foo = (1, 2,
if a == 2:
pass
if a == 2:
^
SyntaxError: invalid syntax
なんで?これらのエラーの意味を正確に理解したとしても、あまり役に立ちません。まず、次のことを覚えておいてください。
SyntaxError
完全に有効な行で が表示された場合は、上の行で欠落している()
または]
または}
、余分な\
、またはその他のいくつかの特殊なケース) を探します。
また、括弧と括弧を一致させるのに役立つエディターを入手できれば、この問題の可能性ははるかに低くなります。(たとえば、emacs では、少なくとも私がセットアップした方法では、if
7 行目の文字を自動的にインデントしようとします。それを「修正」すると、私に反撃し、最終的には'何かが間違っていることに気づかないのは難しいでしょう。それから最初のものを指(
差すと、比類のないものだと教えてくれます。)
しかし、あなたが知りたいなら、ここに行きます:
最初のバージョンは value でタプルを構築し1
、次に value で始まり2
、次の行に続きます。は、三項式2 if a == 2
の完全に適切な開始点ですが、そうではありません。コロンはそれをステートメントにすることを強制し、ステートメントを式の途中に置くことはできません。if
2 if a == 2:
if
1
2 番目のバージョンは、 value 、 value 2
、および次の行に続く複数の値でタプルを構築します。if
を有効な式の開始にすることはできないため、SyntaxError
早い方を取得します。しかし、もちろん、まだ有用なほど早くはありません。