データを保持できる可能性のあるファイルがいくつかあります。それらはさまざまな方法で圧縮できるので、それらを開くには、、およびファイルオブジェクト(インターフェイスをサポートする)を返すその他を使用file()
する必要があります。gzip.GzipFile()
with
開封に成功するまでそれぞれ試してみたいので、次のようなことができます
try:
with gzip.GzipFile(fn + '.gz') as f:
result = process(f)
except (IOError, MaybeSomeGzipExceptions):
try:
with xCompressLib.xCompressFile(fn + '.x') as f:
result = process(f)
except (IOError, MaybeSomeXCompressExceptions):
try:
with file(fn) as f:
result = process(f)
except IOError:
result = "some default value"
可能な圧縮バリアントが数十ある場合、これは明らかに実行可能ではありません。(ネストはどんどん深くなり、コードは常に非常によく似ています。)
これを詳しく説明するためのより良い方法はありますか?
編集:可能であれば、process(f)
で発生した例外が誤ってキャッチされないように、try/exceptも除外したいと思いprocess(f)
ます。