Có cách nào để GDAL nâng cao ngoại lệ trong Python không?


12

Tôi đang làm việc với GDAL bằng Python và muốn có được GDAL để đưa ra các ngoại lệ để tôi có thể làm điều gì đó hữu ích với chúng. Ví dụ: nếu một tệp không thể được mở bằng gdal.Open () Tôi muốn ném một ngoại lệ thay vì gdal trả về Không có. Tôi chỉ muốn một cách để nắm bắt các lỗi thay vì chúng được đổ vào sys.stdout.

Hiện tại tôi đã thử sử dụng gdal.UseExceptions()chức năng nhưng gặp phải một vấn đề. Khi gdal.UseExceptions()được đặt, nó dường như ẩn một số lỗi nhất định và không đưa ra một ngoại lệ nào đối với chúng. Ví dụ ERROR 5: Access window out of range in RasterIO() Requested (1,15) of size 25x3 on raster of 26x17biến mất và không có ngoại lệ được nêu ra. Điều này có vẻ khá nguy hiểm.

Bất kỳ ý tưởng được đánh giá cao, cảm ơn.


1
Doug - khá giống với câu hỏi tôi đã hỏi về lỗi OGR / Postgres sáng nay (liên kết bên dưới). Cách (hackish) chúng tôi xử lý vấn đề lỗi GDAL là đặt mọi thứ kết nối với GDAL / OGR thành Không và sau đó sử dụng lớp lỗi tùy chỉnh để đưa ra một lỗi cụ thể về kết nối, nếu sau hoạt động GDAL / OGR, giá trị vẫn còn Không ai. gis.stackexchange.com/questions/30607/ Mạnh
Tomas

1
Tôi đã nộp một vé theo khuyến nghị của các bình luận dưới đây. Nó có thể được theo dõi ở đây: ( trac.osgeo.org/gdal/ticket/4800 )
Doug

Câu trả lời:


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 );
}

Trình xử lý UseExceptions không lắng nghe bất cứ điều gì khác ngoài CE_Error hoặc CE_Firth. Những gì bạn đang thấy có lẽ là tin nhắn CE_Warning hoặc CE_Debug (kiểm tra giá trị trả về của cuộc gọi chức năng của bạn để xem nó bằng với cái gì).

Sự thỏa hiệp này được thực hiện để đảm bảo rằng các ràng buộc trăn "mới" hoạt động tương tự như các ràng buộc trăn "cũ" (trong đó cuộn bằng tay với tất cả các xử lý lỗi thuộc loại kiểm tra trả lại). Tôi đồng ý loại này hút.

Vui lòng gửi một vé để chúng tôi có thể thêm cấp độ cho trình xử lý ngoại lệ để nghe, ala

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

1
Cảm ơn đã trả lời, điều này hoàn toàn có ý nghĩa và tôi sẽ cố gắng để nhận được một vé và đăng liên kết ở đây!
Doug
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.