পার্থক্যটি হ'ল আপনি যখন ব্যবহার করবেন fromতখন __cause__বৈশিষ্ট্যটি সেট করা হয় এবং বার্তাটি উল্লেখ করে যে ব্যতিক্রমটি সরাসরি কারণে হয়েছিল । আপনি যদি বাদ পড়ে থাকেন fromতবে কোনও __cause__সেট করা নেই, তবে __context__বৈশিষ্ট্যটিও সেট করা যেতে পারে এবং ট্রেসব্যাকটি অন্য কিছু হ্যান্ডল করার সময় প্রসঙ্গটি দেখায় ।
__context__আপনি raiseযদি কোনও ব্যতিক্রম হ্যান্ডলার ব্যবহার করেন তবে সেটিংস নির্ধারণ করা ; আপনি যদি raiseঅন্য কোথাও ব্যবহার করেন __context__তবে সেট করা নেই।
যদি সেট করা থাকে, ব্যতিক্রমের উপর __cause__একটি __suppress_context__ = Trueপতাকাও সেট করা থাকে; কখন __suppress_context__সেট করা থাকে True, __context__কোনও ট্রেসব্যাক মুদ্রণ করার সময় তা উপেক্ষা করা হয়।
আপনি যখন প্রসঙ্গটি প্রদর্শন করতে চান না এমন কোনও ব্যতিক্রম হ্যান্ডলার থেকে উত্থাপন করার সময় ( অন্য কোনও ব্যতিক্রম ঘটেছিল বার্তাটি পরিচালনা করার সময় একটিটি চান না ), তারপরে raise ... from Noneসেট __suppress_context__করতে ব্যবহার করুন True।
অন্য কথায়, পাইথন ব্যতিক্রমগুলির জন্য একটি প্রসঙ্গ নির্ধারণ করে যাতে আপনি যেখানে একটি ব্যতিক্রম উত্থাপিত হয়েছিল তার আত্মপরিচয় করতে পারেন, আপনাকে দেখতে দেয় যে আরও একটি ব্যতিক্রম এটি প্রতিস্থাপন করেছে কিনা। আপনি অন্যান্য ব্যতিক্রম সম্পর্কে ট্র্যাসব্যাককে সুস্পষ্ট করে তুলতে কোনও কারণ যুক্ত করতে পারেন (ভিন্ন শব্দ ব্যবহার করুন), এবং প্রসঙ্গটি উপেক্ষা করা হবে (তবে এখনও ডিবাগ করার সময় অন্তর্মুখী হতে পারে)। ব্যবহারটি raise ... from Noneআপনাকে মুদ্রিত হওয়া প্রসঙ্গে দমন করতে দেয়।
দেখুন raiseবিবৃতি documenation :
fromদফা ব্যতিক্রম chaining জন্য ব্যবহার করা হয়: যদি দেওয়া, দ্বিতীয় অভিব্যক্তি অন্য ব্যতিক্রম বর্গ বা দৃষ্টান্ত, যা যেমন উত্থাপিত ব্যতিক্রম সংযুক্ত করা হবে হওয়া আবশ্যক __cause__(যা লিখনযোগ্য) অ্যাট্রিবিউট। যদি উত্থাপিত ব্যতিক্রমটি পরিচালনা না করা হয় তবে উভয় ব্যতিক্রম মুদ্রণ করা হবে:
>>> try:
... print(1 / 0)
... except Exception as exc:
... raise RuntimeError("Something bad happened") from exc
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ZeroDivisionError: int division or modulo by zero
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
RuntimeError: Something bad happened
ব্যতিক্রম হ্যান্ডলার বা একটি finallyধারাটির মধ্যে কোনও ব্যতিক্রম উত্থাপিত হলে অনুরূপ প্রক্রিয়া সুস্পষ্টভাবে কাজ করে : পূর্ববর্তী ব্যতিক্রমটি নতুন ব্যতিক্রমের __context__বৈশিষ্ট্য হিসাবে সংযুক্ত করা হয় :
>>> try:
... print(1 / 0)
... except:
... raise RuntimeError("Something bad happened")
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ZeroDivisionError: int division or modulo by zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
RuntimeError: Something bad happened
আরো দেখুন বিল্ট-ইন ব্যতিক্রমসমূহ ডকুমেন্টেশন ব্যতিক্রম সংযুক্ত প্রসঙ্গ এবং কারণ তথ্যের উপর বিস্তারিত জানার জন্য।