2011-03-02 7 views
8

को ऊपर उठाने के बारे में जानें मेरे कोड इस प्रकार है:IndexError

try: 
    qs = self._clone() 
    qs.query.set_limits(k, k + 1) 
    return list(qs)[0] 
except self.model.DoesNotExist, e: 
    raise IndexError(e.args) 

:

for p in qs: 
    set = None 
    try: 
     set = p.property.property_locations.all() 
    except IndexError: 
     pass 

    if set: 

समस्या यह है कि जब सेट से कोई भी है यह अभी भी django.db.models.query के इस भाग से IndexError फेंकता है सिस्टम को इस त्रुटि को फेंकने और लूप के लिए अगले तत्व को जारी रखने से कैसे रोकें?

+0

क्या यह काम करता है जब आप कुछ अलग सेट पर नाम बदलते हैं? सेट एक बिल्टिन समारोह है। – Rudi

+0

"जब सेट कोई नहीं है"? आप 'सेट' को 'none'' पर सेट कर रहे हैं। यह ** हमेशा ** होना चाहिए 'कोई नहीं'। आपका सवाल क्या है, वास्तव में? –

+1

क्या ** बिल्कुल ** आपकी समस्या है? 'सेटरी' ऑब्जेक्ट को 'सेट'' पर असाइन करना ** ** कभी भी 'इंडेक्स एरर' नहीं बढ़ाएगा। क्या आप थोड़ा और सटीक हो सकते हैं? –

उत्तर

14

किसी भी मामले में, आपकी कोड में दो गलतियाँ कर रहे हैं:

  1. सेट अंतर्निहित है (जैसा कि आप तो चलो वाक्य रचना हाइलाइटिंग से देख सकते हैं), अपने चर देकर ताकि नाम आप builtin पीछा कर रहे हैं किसी उद्देश्य के लिए, जो कम से कम खराब अभ्यास है, और कोड में बाद में मुद्दों का कारण बन सकता है।
  2. अगर सेट कोई भी नहीं है की जाँच करने के विहित रास्ता लेखन से है: अगर सेट नहीं

अभी तक बेहतर नहीं है, उस कोड स्निपेट लिखने के लिए विहित तरीका है:

try: 
    [code that might raise an exception] 
except Error: 
    [code that handles the exception] 
else: 
    [code that executes when no exception was raised] 

(स्थानापन्न वास्तविक अपवाद के लिए त्रुटि, निश्चित रूप से)

इस तरह आपको उस बिंदु पर 'सेट' भी जांचना नहीं है।

संबंधित मुद्दे

 संबंधित मुद्दे