파이썬에서 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.