มีวิธีในการเพิ่มข้อยกเว้น GDAL ใน Python อย่างถูกต้องหรือไม่?


12

ฉันทำงานกับ GDAL ใน Python และต้องการให้ GDAL เพิ่มข้อยกเว้นเพื่อให้ฉันสามารถทำสิ่งที่มีประโยชน์กับพวกเขาได้ เช่นหากไฟล์ไม่สามารถเปิดด้วย gdal.Open () ฉันต้องการที่จะโยนข้อยกเว้นแทน gdal กลับไม่มี ฉันต้องการวิธีจับข้อผิดพลาดแทนที่จะถูกทิ้งไปยัง 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
ดั๊ก - ค่อนข้างคล้ายกับคำถามที่ฉันถามเกี่ยวกับข้อผิดพลาด OGR / Postgres เมื่อเช้านี้ (ลิงค์ด้านล่าง) วิธี (แฮ็ค) ที่เราจัดการกับปัญหาข้อผิดพลาดของ GDAL คือการตั้งค่าทุกอย่างที่เชื่อมต่อกับ GDAL / OGR เป็น None จากนั้นใช้คลาสข้อผิดพลาดที่กำหนดเองเพื่อเพิ่มข้อผิดพลาดเฉพาะเกี่ยวกับการเชื่อมต่อ ไม่มี. 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 (ตรวจสอบค่าตอบแทนของการโทรเพื่อใช้งานของคุณเพื่อดูว่ามันเท่ากับอะไร)

การประนีประนอมนี้ถูกสร้างขึ้นเพื่อให้แน่ใจว่าการผูกหลาม "ใหม่" มีความคล้ายคลึงกับการผูกหลาม "เก่า" (ซึ่งมีการรีดด้วยมือพร้อมกับการจัดการข้อผิดพลาดทั้งหมดเป็นประเภทเช็คอิน - คืน) ฉันเห็นด้วยกับการดูดชนิดนี้

รู้สึกอิสระที่จะยื่นตั๋วเพื่อให้เราสามารถเพิ่มระดับสำหรับตัวจัดการข้อยกเว้นเพื่อฟัง ala

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

1
ขอบคุณสำหรับคำตอบทั้งหมดนี้สมเหตุสมผลแล้วฉันจะพยายามยื่นตั๋วและโพสต์ลิงค์ที่นี่!
Doug
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.