আমার একটি ফাংশন রয়েছে যা তিনটি জিনিসের মধ্যে একটি ফেরত দিতে পারে:
- সাফল্য (
True) - ব্যর্থতা (
False) - স্ট্রিম পড়ার / পার্সিংয়ে ত্রুটি (
None)
আমার প্রশ্ন হ'ল, যদি আমার বিরুদ্ধে পরীক্ষা করার কথা না হয় Trueবা হয় False, ফলাফল কী হয় তা আমার কীভাবে দেখা উচিত। নীচে আমি বর্তমানে এটি কীভাবে করছি:
result = simulate(open("myfile"))
if result == None:
print "error parsing stream"
elif result == True: # shouldn't do this
print "result pass"
else:
print "result fail"
== Trueঅংশটি অপসারণ করার মতো এটি কি আসলেই সহজ বা আমার ত্রি-বুল ডেটা টাইপ যুক্ত করা উচিত? আমি চাই না যে simulateফাংশনটি একটি ব্যতিক্রম ছুঁড়ে ফেলুক আমি যেমন একটি বহিরাগত প্রোগ্রামটি ত্রুটির সাথে করতে চাই তা লগইন করা এবং চালিয়ে যাওয়া।
simulateফাংশনের ভিতরে আমি সমস্ত ব্যতিক্রম ধরা; প্রোগ্রামটি বাকি থাকা (এবং পরবর্তী উপাদানটি প্রক্রিয়াজাতকরণ) বন্ধ করতে আমি সিমুলেটারের অভ্যন্তরে এমন কিছু চাই না। কিন্তু উত্তরগুলি আমাকে আমার মন পরিবর্তন করতে বাধ্য করছে।
simulateজিনিসগুলি এটি ধরে রাখতে এবং আবার চেষ্টা করতে পারে তবে এটি ভাল। তবে যদি এটি "ব্যর্থ" হয় তবে এটি আর ফিরে আসবে না None। এটি যে স্ক্রিপ্টটিকে ডেকেছে তার কেবলমাত্র ব্যতিক্রম বাড়াতে হবে। যেভাবেই হোক, হয়ে simulateগেছে। রিটার্নিং Noneযথাযথ ব্যতিক্রম বাড়াতে যেমন সহায়তা করে না - বা কোনও ব্যতিক্রমকে simulateহ্যান্ডলিংয়ের জন্য কলিং স্ক্রিপ্টের মাধ্যমে প্রচার করতে দেয় ।
except Exception:পরিবর্তে ব্যবহার করুন। এটি Warningএবং সাথে "সমস্ত" আসল "ত্রুটি ধরা দেয় StopIteration। এটি অনুমতি দেয় KeyboardInterruptএবং SystemExitযদিও মাধ্যমে। আপনি যদি সত্যিই সেগুলি ধরতে চান তবে সম্ভবত অন্য কোনও, বহিরাগত চেষ্টা / বাদে বা অন্য কোনও কাঠামো ব্যবহার করা ভাল যা আপনার উদ্দেশ্যকে স্পষ্ট করে দলিল করে, কারণ সেগুলি "ত্রুটি" নয়। (তবে আমি "প্রায় কখনওই বলিনি" ... সম্ভবত আপনার ক্ষেত্রে আপনি সব কিছু দখল করতে চান এবং এমনকি সিটিআরএল-সি বা sys.exit()বেরিয়ে আসা ইত্যাদি রোধ করতে চান )