我们假设我有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是否有效,而不是等到我想读它?
谢谢!
答案 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。