61115


はじめまして

表題について、  
Pythonに限った話ではなくインタプリタ言語特有なのかもしれませんが、  
Python3の環境で下記コードを実行したところエラーとなります。

[code]

    import sys
    if sys.version_info.major == 2:
      print '2'
    else:
      print('3')
    
      File "<ipython-input-2-2e4626ca9220>", line 2
        print '2'
                ^
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print('2')?
    
[/code]

Python3系なので、print関数にて括弧が無いのがエラーの原因なのは承知していますが、  
そもそもif文に入ってもいないのに構文エラーとなることが気になりました。

処理しないだけで、一応if文内の方にも入る動きをするのがインタプリタ言語なのでしょうか？  
*DOSでも同じようなことがあった気がしますが調べても出てこず。

よろしくお願いいたします


CC BY-SA 4.0
2019-12-04T23:22:49.957
61112
2019-12-05T00:03:15.457
2019-12-04T23:37:06.270
3060
36925
question
python python3
Pythonのコード解釈順序について


> 処理しないだけで、一応if文内の方にも入る動きをするのがインタプリタ言語なのでしょうか？

プログラムの読み込みと実行は別です。  
読み込み時点では、Pythonの文法に従って全行を読み込みます。  
このとき、文法が間違っていると`SyntaxError`が発生します。

書かれているコードの例では、 `print` という文字列が何を指すのかを解釈しようとします。そこで、 `print`
が組み込み関数だということをPython内部で理解して、その続きを読み進めようとします。しかし続けて、スペースと `'2'`
が登場しているため、Pythonはこれを解釈するのに失敗し、続きの行を解釈できなくなるため、 `SyntaxError`を発生させて読み込みを中止します。

最後まで文法エラーなく読み込めれば、そこで初めて先頭から実行されます。

補足ですが、 `Missing parentheses in call to 'print'. Did you mean print('2')?`
と表示されるのは、これがよくある間違いなので親切に表示するようにPythonが実装されているためです。Python3.5までは `SyntaxError:
Missing parentheses in call to 'print'` というエラーでした。


CC BY-SA 4.0
2019-12-05T00:03:15.457
61115
2019-12-05T00:03:15.457
806
61112
answer