গৃহীত উত্তরের মন্তব্য বিভাগে আলোচিত মিঃ জিউসের প্রশ্নের উত্তর দেওয়ার জন্য, আমি এটি একটি ইন্টারেক্টিভ কনসোলে (পাইচার্ম 2018-2019 এর সাথে পরীক্ষিত) অবিচ্ছিন্ন ব্যতিক্রমগুলি লগ করতে ব্যবহার করি। আমি খুঁজে sys.excepthook
পেয়েছি যে পাইথন শেলটিতে কাজ করে না তাই আমি আরও গভীর করে দেখতে পেলাম যে এর sys.exc_info
পরিবর্তে আমি ব্যবহার করতে পারি । যাইহোক, 3 টি আর্গুমেন্ট লাগে তার sys.exc_info
বিপরীতে কোন আর্গুমেন্ট লাগে না sys.excepthook
।
এখানে, আমি উভয় ব্যবহার sys.excepthook
এবং sys.exc_info
একটি লেফাফা ফাংশন একটি ইন্টারেক্টিভ কনসোলে উভয় ব্যতিক্রম এবং একটি স্ক্রিপ্ট লগইন করুন। উভয় ফাংশনের সাথে একটি হুক ফাংশন সংযুক্ত করতে, আমার দুটি ভিন্ন ইন্টারফেস রয়েছে যদি যুক্তি দেওয়া হয় বা না হয় তার উপর নির্ভর করে।
কোডটি এখানে:
def log_exception(exctype, value, traceback):
logger.error("Uncaught exception occurred!",
exc_info=(exctype, value, traceback))
def attach_hook(hook_func, run_func):
def inner(*args, **kwargs):
if not (args or kwargs):
# This condition is for sys.exc_info
local_args = run_func()
hook_func(*local_args)
else:
# This condition is for sys.excepthook
hook_func(*args, **kwargs)
return run_func(*args, **kwargs)
return inner
sys.exc_info = attach_hook(log_exception, sys.exc_info)
sys.excepthook = attach_hook(log_exception, sys.excepthook)
লগিং সেটআপটি gnu_lorien এর উত্তরে পাওয়া যাবে।