有没有办法在Python中适当地使GDAL引发异常?


12

我正在Python中使用GDAL,并且想让GDAL引发异常,以便我可以对它们做一些有用的事情。例如,如果无法使用gdal.Open()打开文件,我想抛出一个异常,而不是gdal返回None。我只想捕获错误而不是将它们转储到sys.stdout。

目前,我已经尝试使用该gdal.UseExceptions()功能,但是遇到了一个问题。当gdal.UseExceptions()设置似乎隐藏某些错误,他们不会引发异常。例如ERROR 5: Access window out of range in RasterIO() Requested (1,15) of size 25x3 on raster of 26x17消失,没有异常引发。这似乎很危险。

任何想法表示赞赏,谢谢。


1
道格(Doug)-与我今天早上询问OGR / Postgres错误的问题类似(下面的链接)。处理GDAL错误问题的(骇人听闻的)方法是将连接到GDAL / OGR的所有内容都设置为None,然后使用自定义错误类引发有关连接的特定错误,如果在GDAL / OGR操作之后该值仍然是没有。 gis.stackexchange.com/questions/30607/…–
托马斯

1
我按照以下评论的建议提交了机票。可以在此处跟踪:(trac.osgeo.org/gdal/ticket/4800
Doug

Answers:


10
/*
** We do not want to interfere with warnings or debug messages since
** they won't be translated into exceptions.
*/
if (eclass == CE_Warning || eclass == CE_Debug ) {
    pfnPreviousHandler(eclass, code, msg );
}

UseExceptions处理程序不会监听CE_Error或CE_Fatal之外的任何东西。您看到的可能是一条CE_Warning或CE_Debug消息(检查函数调用的返回值以查看它的含义)。

做出这种折衷是为了确保“新” python绑定的行为类似于“旧” python绑定(在手动滚动时,所有错误处理均为“返回”类型)。我同意这种糟透了。

随时提交票证,以便我们可以添加级别供异常处理程序听

UseExceptions(level=CE_Warning)
UseExceptions(level=CE_Debug)

1
感谢您的答复,这完全是有道理的,我将尝试提交一张票并将链接发布在这里!
Doug 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.