Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用gdal打开geotiff生成AttributeError:\uu退出___Python_Python 3.x_Gdal - Fatal编程技术网

Python 使用gdal打开geotiff生成AttributeError:\uu退出__

Python 使用gdal打开geotiff生成AttributeError:\uu退出__,python,python-3.x,gdal,Python,Python 3.x,Gdal,我有一个光栅图像,想用gdal打开它来获取一些关于投影的信息 使用以下代码打开可以正常工作: from osgeo import gdal gtiff = gdal.Open(filename) prj = gtiff.GetProjection() # do some work 但是,以下操作不起作用: with gdal.Open(filename) as gtiff: prj = gtiff.GetProjection() 相反,会显示一个属性错误: AttributeErro

我有一个光栅图像,想用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的许多范例都依赖于“神奇的方法”。例如,对
len(x)
的调用调用调用
x.\uu len\uuu()
。像
=
这样的等式也使用双下划线的神奇方法

Python的
和X作为X
范例依赖于两种神奇的方法:
X.\uuuuuuuuuuuuuuuuuuuuu
X.\uuuuuuuuuuuuuu退出。
gdal.Open
返回的类是一个
gdal.Dataset
,它没有这些方法。因此,当像您提供的那样将
与as
语句一起使用时,它会抛出一个错误

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

import gdal
ds = gdal.Open('filename.tif', gdal.GA_Update)
# do something
del ds
删除
数据集
将确保更改已写入文件。您还可以通过运行
ds.FlushCache()


创建该库的人似乎没有在该类型上实现上下文管理器协议。完整地回答一下:这些方法不存在的具体原因是什么?或者这是一个相对容易添加的东西(我想保存向后兼容性不会是一个问题)?。这种方法确实不可靠,尽管GDAL的Python绑定基本上不提供其他选择。