open geotiff with gdal produces AttributeError: __exit__

open geotiff with gdal produces AttributeError: __exit__

我有一张光栅图像,想用 gdal 打开它以获取有关投影的一些信息。

使用以下代码打开工作正常:

from osgeo import gdal
gtiff = gdal.Open(filename)
prj = gtiff.GetProjection()
# do some work

但是,以下方法不起作用:

with gdal.Open(filename) as gtiff:
    prj = gtiff.GetProjection()

而是显示属性错误:

AttributeError: __exit__

我认为后者通常被认为是更好的风格。我正在使用 Python 3.4.5 :: Continuum Analytics, Inc. (anaconda)。

Python 的许多范例都依赖于 "magic methods"。例如,对 len(x) 的调用会调用 x.__len__()>>= 等等式也使用双下划线的魔术方法。

Python 的 with X as x 范式依赖于两个魔术方法:X.__enter__X.__exit__gdal.Open返回的class是一个gdal.Dataset,没有这些方法。因此,在使用您提供的 with as 语句时会抛出错误。

打开和关闭 gdal.Dataset 的正确方法是:

import gdal
ds = gdal.Open('filename.tif', gdal.GA_Update)
# do something
del ds

删除 Dataset 将确保将更改写入文件。您还可以通过 运行 ds.FlushCache()

编写这些更改

Doc about Python's with as statements

Python's special methods