ホームページ  >  記事  >  バックエンド開発  >  Python の os.path.exits() の落とし穴を解決する方法

Python の os.path.exits() の落とし穴を解決する方法

WBOY
WBOY転載
2023-05-16 17:58:271087ブラウズ

質問

同様のコードをよく見かけます:

assert os.path.isdir(path_model_dir)
assert os.path.exits(path_model_dir)

path_model_dirとして相対パスを入力すると、悲惨な結果が生じます。次の要素に注意する必要があります:

  • os.path.exists() メソッドは、ファイルを見つけるために sys.path 内のパスを直接使用しません。指定されたパスが存在するかどうかを確認するためのシステム インターフェイス。

  • 相対パスを使用する場合、Python はまず、現在の作業ディレクトリを基準とした相対パスとして解釈します。通常、対話型インタープリターの現在の作業ディレクトリは、インタープリターが開始されたディレクトリです。

上の 2 つの段落では、相対パスを入力した場合、ここで言及されている相対パスは現在のファイルに対する相対パス、またはインタープリタに対する相対パスであることを説明しています。インタープリターの実行、インタープリターのデバッグに相対的なものですか、それともコマンドラインの相対パスに相対的なものですか?以前同じエディターでコードを編集したことがありますが、実行時は直接実行できましたが、デバッグ時にエラーが報告され続け、後で同じエディター内のデバッグ インタプリタと実行インタプリタの相対パスが異なることがわかりました (驚き) !)。

そして、os.path.exists() メソッドは、ファイルを検索するために sys.path 内のパスを直接使用せず、ファイルを検索するために ~/.bashrc 内の環境変数を使用せず、相対パスのみを使用します。パスとファイルを見つけるための絶対パス。

提案

提案は 2 つあります。重要な点は、絶対パスを使用することです。

  • ハードコーディングされた文字列への絶対パスを直接指定する

  • (推奨) __file__ を使用して、スクリプト ファイルに対する相対パスを結合します。

sys.path.append(path) に追加されたパスは何に使われるのかと尋ねる人もいますが、実際には、ここで追加されたパスは主にインポート パッケージをインポートするために使用されます。つまり、Python のモジュール検索パスにディレクトリを追加したい場合は、それらのディレクトリを sys.path リストに追加できます。これにより、Python はモジュールを検索するときにこれらのディレクトリを自動的に含めます。ただし、このメソッドは、os.path.exists() メソッドを呼び出すときではなく、Python がモジュールをインポートするときに使用されることに注意してください。

以上がPython の os.path.exits() の落とし穴を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。