हैंडलिंग एक छोटी पायथन में अपवाद हैंडलिंग के बारे में किसी के साथ बहस के बाद - एक कतार वस्तु की हैंडलिंग से तेज - मैंने सोचा कि मैं इसे बाहर वहाँ फेंक होगी ...पायथन: Queue.Empty अपवाद
विधि 1:
import Queue
q = Queue.Queue()
try:
task=q.get(False)
#Opt 1: Handle task here and call q.task_done()
except Queue.Empty:
#Handle empty queue here
pass
#Opt2: Handle task here and call q.task_done()
विधि 2:
import Queue
q = Queue.Queue()
if q.empty():
#Handle empty queue here
else:
task = q.get()
#Handle task here
q.task_done()
एक तर्क है कि विधि 1 गलत है क्योंकि कतार खाली किया जा रहा है कोई त्रुटि नहीं है, और इसलिए Queue.Empty अपवाद का उपयोग नहीं संभाला जाना चाहिए है। इसके अतिरिक्त, यदि आप मानते हैं कि कार्य हैंडलिंग भाग संभावित रूप से बड़ा हो सकता है तो यह डीबगिंग को और अधिक कठिन बना सकता है।
अन्य तर्क यह है कि किसी भी तरह से अजगर में और कहा कि स्वीकार्य है है की कोशिश के बाहर काम से निपटने/छोड़कर अगर काम से निपटने बड़ी है डीबगिंग, सहायता कर सकता है, हालांकि सहमति इस विधि 2.
का उपयोग करने से भद्दा लग सकता है किराय?
अपडेट: उत्तर 1 के बाद थोड़ी अधिक जानकारी के माध्यम से आया .... कुछ मल्टीथ्रेड कोड में विधि 1 का उपयोग करने के बाद बहस शुरू की गई थी। इस मामले में, कोड लॉक (थ्रेडिंग.लॉक ऑब्जेक्ट से) प्राप्त करेगा और इसे या तो लौटाए जाने के बाद या क्यूई को छोड़ देगा। लक्षण
अपडेट 2: यह दोनों के लिए अज्ञात था कि कतार वस्तु धागा सुरक्षित था। ऐसा लगता है कि जाने का तरीका है/छोड़ना!
मुझे नहीं लगता कि लॉक उत्तर कैसे बदलता है, मुझे यह भी समझ में नहीं आता कि इसे लॉक की आवश्यकता क्यों है, कतार पहले ही थ्रेड-सुरक्षित है। –