2017-06-26 12 views
0

のは、私がecho "hello world" > test.bson.gzによって生成された偽のgzファイルtest.bson.gzを持っている、と私は試してみましたとしましょう:偽物は `「未gzipで圧縮されたファイルを」例外IOErrorを上げる.gz`

try: 
    bson_file = gzip.open('test.bson.gz', mode='rb') 
except: 
    print("cannot open") 

ませ例外はここでキャッチされません。 (本当に奇妙な、これが有効なGZないので...)

その後、私が行います

data = bson_file.read(4) 

私が取得します:

File "/usr/lib/python2.7/gzip.py", line 190, in _read_gzip_header 
    raise IOError, 'Not a gzipped file' 
IOError: Not a gzipped file 

は、私が判断することができますどのような方法があります(エラーをキャッチすることもできます)この.gzが有効になっているかどうかは、開こうとすると有効になりますか?

ありがとうございます!

答えて

1

あなたはgzip.peek(n)を使用することができます。

読むのn非圧縮バイトをファイル位置を進めずに。あなたは、ファイルの内容を消費せずにエラーをキャッチします方法

try: 
    bson_file = gzip.open('test.bson.gz', mode='rb') 
    bson_file.peek(1) 
except OSError: 
    print("cannot open") 

ヒント:すべてのエラーを無条件でキャッチしないでください。 IOErrorOSErrorにマージされたので、except OSErrorを追加しました。PEP3151を参照してください。

+0

Wait ...このコードは有効なBSONでは機能しません。有効な '.bson.gz'に対して' bson_file.peek(1) 'を実行すると、それでもエラーを捕捉できることがわかります。 – tclo2

関連する問題