假`.gz`引发IOError,'不是gzip压缩文件'

时间:2017-06-26 11:01:16

标签: python try-catch gz

我们假设我有test.bson.gz生成的假gz文件echo "hello world" > test.bson.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 个答案:

答案 0 :(得分:1)

您可以使用gzip.peek(n)

  

在不提升文件位置的情况下读取 n 未压缩的字节。

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

这样你就可以在不消耗文件内容的情况下捕获错误。

提示:您应该避免无条件地捕获所有错误。我添加了except OSError,因为{3.3}已在Python 3.3中合并到IOError - 请参阅PEP3151