1

copy.py現在のディレクトリに、次の内容の名前のスクリプトがあります。

#!/usr/bin/env python3

print("Ahoy, matey!")

Python インタラクティブ シェルを実行し、例外を発生させるアクション (存在しない変数を参照するなど) を実行すると、驚いたことに、"Ahoy,matey!" という文が表示されます。印刷されました。

copy.pyスクリプトの名前を他の名前に変更すると、たとえばscript.py、そのように動作しなくなります。私の質問は、対話型シェルがcopy.pyエラーを呼び出す必要があるのはなぜですか? この動作は想定されているか、またはどこかに文書化されていますか?

ありがとう!

4

1 に答える 1

1

Python がモジュールをインポートするとき、モジュールの検索パスの順序は次のとおりです。

  • 入力スクリプトを含むディレクトリ (または現在のディレクトリ)。
  • PYTHONPATH (シェル変数 PATH と同じ構文のディレクトリ名のリスト)。
  • インストールに依存するデフォルト。

現在、例外を発生させると、Python は特定のコードを実行します。copyPython モジュールをインポートしようとするコードは、代わりにモジュールをインポートし、その中の文字列を出力します。これが、標準の Python モジュールの名前でもある名前を使用すべきではない理由です。

于 2013-09-04T08:32:17.473 に答える