क्या पायथन में जीडीएएल अपवादों को ठीक से रखने का एक तरीका है?


12

मैं पायथन में GDAL के साथ काम कर रहा हूं और अपवादों को बढ़ाने के लिए GDAL प्राप्त करना चाहता हूं ताकि मैं उनके साथ कुछ उपयोगी कर सकूं। उदाहरण के लिए अगर कोई फ़ाइल gdal के साथ नहीं खोली जा सकती है। PDF () मैं गाल्ड रिटर्निंग नो के बजाय एक अपवाद फेंकना चाहूंगा। मैं सिर्फ़ 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
डग - मैं आज सुबह ओजीआर / पोस्टग्रेज त्रुटियों के बारे में पूछे गए प्रश्न के समान (नीचे लिंक)। (हैकिश) जिस तरह से हम GDAL त्रुटि मुद्दे को संभालते हैं वह सब कुछ सेट करने के लिए है जो GDAL / OGR से जुड़ता है और फिर कनेक्शन के बारे में एक विशिष्ट त्रुटि उठाने के लिए कस्टम त्रुटि वर्ग का उपयोग करता है, यदि GDAL / OGR ऑपरेशन के बाद मान अभी भी है कोई नहीं। gis.stackexchange.com/questions/30607/…
टॉमस

1
मैंने नीचे टिप्पणी द्वारा अनुशंसित के रूप में एक टिकट दायर किया। इसे यहां ट्रैक किया जा सकता है: ( trac.osgeo.org/gdal/ticket/4800 )
डौग

जवाबों:


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

UseException हैंडलर CE_Error, या CE_Fatal के अलावा कुछ भी नहीं सुनता है। आप जो देख रहे हैं वह संभवतः CE_Warning या CE_Debug संदेश है (यह देखने के लिए कि यह किसके बराबर है, यह देखने के लिए अपने कार्यात्मक कॉल की वापसी मूल्य की जांच करें)।

यह समझौता यह सुनिश्चित करने के लिए किया गया था कि "नए" पायथन बाइंडिंग "पुराने" पायथन बाइंडिंग के समान व्यवहार करते हैं (जो कि चेक-ऑफ-रिटर्न प्रकार के होने पर सभी त्रुटि से निपटने के साथ हाथ से लुढ़का)। मैं इस तरह के चूसना से सहमत हूं।

एक टिकट दर्ज करने के लिए स्वतंत्र महसूस करें ताकि हम अपवाद हैंडलर के लिए स्तर सुन सकें, अला

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

1
उत्तर के लिए धन्यवाद, यह पूरी तरह से समझ में आता है और मैं कोशिश करूंगा कि मैं टिकट दर्ज करूं और यहां लिंक पोस्ट करूं!
डग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.