2017-02-26 10 views
1

exec(open)関数の動作を理解しようとしていて、次の問題が発生しました。この問題を説明するための簡単なコードを示します。PycharmのPython Consoleでexec(open)関数を実行していない場合__name__ == '__main__'ブロック

Module1.py

print(11) 

def func(): 
    print(12) 

if __name__ == "__main__": 
    func() 

だから私は 'のpython Module1.py' を使用して、ターミナルウィンドウからこのモジュールを実行したときに、私が実行

C:\projects>python Module1.py 
11 
12 

しかし、のような出力を得ますこの 'exec(open(' Module1.py ')。read())'としてexec(open)関数を使用すると、出力は

>>> exec(open('Module1.py').read()) 
11 
です。 0

質問:exec関数を使用しているときに "if __name__ == __main__"ブロックが実行されないのはなぜですか?

+0

メインから実行していないため、つまり、 '__name __!= '__ main __''今すぐ – abccd

+0

どのバージョンのpythonを使用していますか?私は3.6と2.7.13でテストしたところ、完全に動作します。おそらくこれはWindows固有の問題ですか? – Alan

+0

@Alan私はPython 3.5.2を使用しています。 –

答えて

0

PyCharmの実行コードは、適切なPythonコンソールでコードを実行するのと同じである必要はありません。あなたはそれが戻ってコンソールに行くと出力をチェックする価値があるPyCharmで奇妙な結果を得る場合は、あなたのコメントに言及したよう

結果に基づいて、PyCharmは「メイン」として実行されているように見え、PyCharm経由で実行しているコードはモジュールメインと見なされていないようです。

関連する問題