কম্পিউটার টিউটোরিয়াল

পাইথন প্রোগ্রামে সতর্কতা নিয়ন্ত্রণ (Warning Control)


প্রোগ্রামে সতর্কতা (Warning) এরর (Error) থেকে ভিন্ন। এরর مواجه হলে পাইথন প্রোগ্রাম তাৎক্ষণিক বন্ধ হয়। কিন্তু সতর্কতা фаতাল (fatal) নয়। এটি নির্দিষ্ট বার্তা দেখায় কিন্তু প্রোগ্রাম চলতে থাকে। সতর্কতা ব্যবহারকারীকে কিছু নির্দিষ্ট শর্তের প্রতি সতর্ক করার জন্য ইস্যু করা হয় যা এক্সেপশন নয়। সাধারণত ডিপ্রিকেটেড (deprecated) কীওয়ার্ড/ফাংশন/ক্লাস ব্যবহার পাওয়া যাওয়ার সময় সতর্কতা দেখায়।

সতর্কতা বার্তা পাইথনের স্ট্যান্ডার্ড লাইব্রেরির 'warnings' মডিউলের warn() ফাংশন দ্বারা প্রদর্শিত হয়। Warning আসলে বিল্ট-ইন ক্লাস হায়ারার্কিতে Exception-এর সাবক্লাস। বেশ কিছু বিল্ট-ইন Warning সাবক্লাস রয়েছে। ব্যবহারকারী নিজেও সাবক্লাস ডিফাইন করতে পারেন।

Warning সকল সতর্কতা ক্যাটাগরি ক্লাসের বেস ক্লাস।
UserWarning warn()-এর ডিফল্ট ক্যাটাগরি।
DeprecationWarning ডেভেলপারদের জন্য ডিপ্রিকেটেড ফিচার সম্পর্কিত সতর্কতা।
SyntaxWarning সন্দেহজনক সিনট্যাক্টিক ফিচার সম্পর্কিত সতর্কতা।
RuntimeWarning সন্দেহজনক রানটাইম ফিচার সম্পর্কিত সতর্কতা।
FutureWarning এন্ড ইউজারদের জন্য ডিপ্রিকেটেড ফিচার সম্পর্কিত সতর্কতা।
PendingDeprecationWarning ভবিষ্যতে ডিপ্রিকেটেড হতে যাওয়া ফিচার সম্পর্কিত সতর্কতা।
ImportWarning মডিউল ইম্পোর্ট করার সময় ট্রিগার হওয়া সতর্কতা।
UnicodeWarning ইউনিকোড সম্পর্কিত সতর্কতা।
BytesWarning বাইটস ও বাইট অ্যারে সম্পর্কিত সতর্কতা।
ResourceWarning রিসোর্স ব্যবহার সম্পর্কিত সতর্কতা।

সতর্কতার উদাহরণ

নিচের কোডে একটি ক্লাস ডিফাইন করা হয়েছে যার একটি মেথড ডিপ্রিকেটেড এবং অন্যটি ভবিষ্যতে ডিপ্রিকেটেড হতে যাচ্ছে।

# warningexample.py import warnings class WarnExample: def __init__(self): self.text = "Warning" def method1(self): warnings.warn( "method1 is deprecated, use new_method instead", DeprecationWarning ) print('method1', len(self.text)) def method2(self): warnings.warn( "method2 will be deprecated in version 2, use new_method instead", PendingDeprecationWarning ) print('method2', len(self.text)) def new_method(self): print('new method', len(self.text)) if __name__ == '__main__': e = WarnExample() e.method1() e.method2() e.new_method()

যদি উপরের স্ক্রিপ্টটি কমান্ড প্রম্পট থেকে নিচের মত করে এক্সিকিউট করা হয়:

E:\python37>python warningexample.py

টার্মিনালে কোনো সতর্কতা বার্তা দেখাবে না। সেটির জন্য -Wd স্যুইচ ব্যবহার করতে হবে:

E:\python37>python -Wd warningexample.py warningexample.py:10: DeprecationWarning: method1 is deprecated, use new_method instead DeprecationWarning method1 7 warningexample.py:19: PendingDeprecationWarning: method2 will be deprecated in version 2, use new_method instead PendingDeprecationWarning method2 7 new method 7

একইভাবে, নিচের ইন্টারেক্টিভ সেশনেও কোনো সতর্কতা দেখাবে না।

E:\python37>python >>> from warningexample import WarnExample >>> e = WarnExample() >>> e.method1() method1 7 >>> e.method2() method2 7 >>> e.new_method() new method 7

পাইথন সেশন -Wd দিয়ে শুরু করতে হবে:

E:\python37>python -Wd >>> from warningexample import WarnExample >>> e = WarnExample() >>> e.method1() E:\python37\warningexample.py:10: DeprecationWarning: method1 is deprecated, use new_method instead DeprecationWarning method1 7 >>> e.method2() E:\python37\warningexample.py:17: PendingDeprecationWarning: method2 will be deprecated in version 2, use new_method instead PendingDeprecationWarning method2 7 >>> e.new_method() new method 7

সতর্কতা ফিল্টার (Warnings Filters)

সতর্কতা ফিল্টার নিয়ন্ত্রণ করে যে সতর্কতা উপেক্ষা হবে, প্রদর্শিত হবে, বা এক্সেপশনে রূপান্তরিত হবে (raising an exception)।

Action Meaning
error সতর্কতাকে এক্সেপশনে রূপান্তরিত করুন।
ignore সতর্কতা উপেক্ষা করুন।
always সদা সতর্কতা নির্গত করুন।
default প্রতিটি লোকেশন থেকে প্রথমবার জেনারেট হওয়া সতর্কতা প্রিন্ট করুন।
module প্রতিটি মডিউল থেকে প্রথমবার জেনারেট হওয়া সতর্কতা প্রিন্ট করুন।
once প্রথমবার জেনারেট হওয়া সতর্কতা প্রিন্ট করুন।

নিচের ইন্টারেক্টিভ সেশন simplefilter() ফাংশন দিয়ে ফিল্টারকে ডিফল্ট সেট করে।

E:\python37>python >>> import warnings >>> warnings.simplefilter('default') >>> from warningexample import WarnExample >>> e = WarnExample() >>> e.method1() E:\python37\warningexample.py:10: DeprecationWarning: method1 is deprecated, use new_method instead DeprecationWarning method1 7 >>> e.method2() E:\python37\warningexample.py:17: PendingDeprecationWarning: method2 will be deprecated in version 2, use new_method instead PendingDeprecationWarning method2 7 >>> e.new_method() new method 7

অস্থায়ীভাবে সতর্কতা দমন করতে simplefilter কে 'ignore' সেট করুন।

import warnings def function(): warnings.warn("deprecated", DeprecationWarning) with warnings.catch_warnings(): warnings.simplefilter("ignore") function()

  1. পাইথনে issuperset() ফাংশন

  2. পাইথনে POSIX স্টাইল TTY কন্ট্রোল

  3. পাইথন নেমস্পেসড প্যাকেজ দিয়ে প্রোগ্রাম ডেভেলপমেন্ট

  4. পাইথনে FloatingPointError এক্সসেপশন ক্যাচ করা