파이썬에서 GDAL이 예외를 발생시키는 방법이 있습니까?


12

파이썬에서 GDAL과 함께 일하고 있으며 GDAL이 예외를 제기하여 유용한 무언가를 할 수 있기를 원했습니다. 예를 들어 gdal.Open ()으로 파일을 열 수 없으면 gdal이 None을 반환하는 대신 예외를 throw하고 싶습니다. 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에 연결하는 모든 항목을 없음으로 설정 한 다음 사용자 지정 오류 클래스를 사용하여 연결에 대한 특정 오류를 발생시키는 것입니다. 없음 gis.stackexchange.com/questions/30607/…
— Tomas

1
아래 의견에서 권장하는대로 티켓을 제출했습니다. 여기에서 추적 할 수 있습니다 : ( trac.osgeo.org/gdal/ticket/4800 )
— Doug

답변:


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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.