2017-09-12 5 views
1

私は新しいPythonユーザーにいくつかのコードを手伝ってくれていて、Pythonインタプリタが実際のエラーの後でその行に構文エラーを表示する理由を私に尋ねました。次のコードを考えてみましょう:エラーが前の行に本当にあるもののなぜPythonインタプリタは構文エラーを次の行に表示しますか?

x = [1, 2, 3 
print x 

構文エラーは、print xとのラインのために表示されます。

これは最初に実行したときに非常に混乱することがあります(それは非常によくある問題です)。是正するのが難しいです...なぜそれが修正されていないのですか?現在のアプローチには何らかの利点がありますか?

+2

最初の行に構文エラー_がありません。 2行目に ']'を付けると、これは有効な構文です。したがって、1行目に何も問題はありません。 –

+0

パーサーは、構文解析ビットが解析されていることを期待していないことにパーサが遭遇すると、構文エラーになります。だから、「これは、あなたがそれを修正する必要がある場所です」ではなく「これが理にかなっていないところです」と考えるのは簡単です...その時点で、あなたが何を言おうとしているのかは分かりません - どの部分が間違っているのか分かりません... –

+0

リストの構文で最後の行にあるとエラーを表示することは妥当でしょうか?私は実際には、新しいPythonプログラマーがこれを実行し、時間を無駄にし、混乱させてしまいます。 – PProteus

答えて

7

それは複数行にまたがってリストを分割するための有効なPythonの構文、like soです:だから

x = [1, 2, 3 
, 4, 5, 6] 
print x 

、インタプリタは、それが明らかに見つけることができないリストの有効な継続を期待しprint...ラインを、読み取りを開始します。

また、私はこの誤解を招く恐れがあります。なぜあなたはエラーが発生するのかを理解するのはかなり簡単だと思います。

+1

リスト構文の最後の行にエラーを記述するのは妥当でしょうか? – PProteus

+1

それは依存します。あなたの場合、おそらく。私のリストが2行にまたがっていて、2行目にカンマを忘れてしまった場合は、現在のエラーがより良いです。 – GolfWolf

+0

おそらくもっと説明的なエラーが良いでしょうか? 「この行の前または前に壊れたリスト」のようなもの! – PProteus

3
x = [1, 2, 3 
] 
print x 

有効な構文!これは可能なので、リストが続行または終了しないときに実際に行2にエラーがあります。

関連する問題