1. ホーム
  2. python

[解決済み] Pythonでオブジェクトがファイルであるかどうかをチェックする

2022-11-08 01:54:55

質問

ファイル的なもの は、実際のファイルのように振る舞う Python のオブジェクトで、例えば read() と write メソッド() を持ちますが、Python と異なる実装を持っています。 file . を実現するものです。 アヒルの型付け の概念を実現したものです。

ファイルのようなオブジェクトを、ファイルが予想される場所ならどこでも許可することは、良い習慣と考えられています。 ストリングIO や Socket オブジェクトを実際のファイルの代わりに使用することができます。ですから、このようなチェックを行うのはよくありません。

if not isinstance(fp, file):
   raise something

オブジェクト(例えばメソッドのパラメータ)が "file-like"であるかどうかを確認する最良の方法は何でしょうか?

どのように解決するのですか?

特別な要件がない限り、一般にこのようなチェックをコード内にまったく持たないのはよい習慣ではありません。

Pythonでは型付けは動的です。オブジェクトがファイルのようであるかどうかをチェックする必要があると感じるのはなぜですか。

あなたができるどんなチェックも、いずれにせよ実行時に行われるでしょう。 if not hasattr(fp, 'read') を実行して例外を発生させることは、単に fp.read() を呼び、そのメソッドが存在しない場合に生じる属性エラーを処理することよりも、ほとんど実用的ではありません。